0

I'm trying to deploy my app for the first time in heroku and I'm encountering a weird bug. When I try to run heroku rake db:migrate, i see this error :

rake aborted! StandardError: An error has occurred, this and all later migrations canceled:

PG::UndefinedTable: ERROR:  relation "companies" does not exist
: CREATE TABLE "users" ("id" bigserial primary key, "admin" boolean DEFAULT 'f', "admin_c" boolean DEFAULT 'f', "color" character varying, "initial" character varying, "name" character varying, "surname" character varying, "pseudo" character varying, "step" integer, "company_id" bigint, "email" character varying DEFAULT '' NOT NULL, "encrypted_password" character varying DEFAULT '' NOT NULL, "reset_password_token" character varying, "reset_password_sent_at" timestamp, "remember_created_at" timestamp, "sign_in_count" integer DEFAULT 0 NOT NULL, "current_sign_in_at" timestamp, "last_sign_in_at" timestamp, "current_sign_in_ip" character varying, "last_sign_in_ip" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL, CONSTRAINT "fk_rails_7682a3bdfe"
FOREIGN KEY ("company_id")
  REFERENCES "companies" ("id")
)

I have verified a thousand times my migrations files Users & Companies but nothing seems bad. So I really don't know what to do. I also try all the database reset etc.. Like in this answer for example. But nothing is working for me. Anyone have seen this before ?? I'm really desperate at this point.

PS: And I also remove made the pg and sql3 changes.

So I give you my code if it can be useful to discover the problem

Company_model :

class Company < ApplicationRecord
  has_many :users, dependent: :destroy
  has_many :groups, dependent: :destroy
end

User_model :

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  belongs_to :company, optional: true

  has_many :users_group, dependent: :destroy
  has_many :groups, through: :users_group
  has_many :users_post, dependent: :destroy
  has_many :posts, through: :users_post
  has_many :tasks_users, dependent: :destroy
  has_many :tasks, through: :tasks_users

  has_many :requests, dependent: :destroy
  has_many :groupes_admin, dependent: :destroy
  has_many :posts, dependent: :destroy
  has_many :comments, dependent: :destroy
  has_many :tasks, dependent: :destroy

end

Company migration :

class CreateCompanies < ActiveRecord::Migration[5.1]
  def change
    create_table :companies do |t|
      t.string :name
      t.string :ref

      t.timestamps
    end
  end
end

Devise migration :

class DeviseCreateUsers < ActiveRecord::Migration[5.1]
  def change
    create_table :users do |t|
      ## Database authenticatable
      t.boolean :admin, default: false
      t.boolean :admin_c, default: false
      t.string :color
      t.string :initial
      t.string :name
      t.string :surname
      t.string :pseudo
      t.integer :step

      t.references :company, index: true, foreign_key: true
      t.boolean :admin, default: false
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""

      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      ## Rememberable
      t.datetime :remember_created_at

      ## Trackable
      t.integer  :sign_in_count, default: 0, null: false
      t.datetime :current_sign_in_at
      t.datetime :last_sign_in_at
      t.string   :current_sign_in_ip
      t.string   :last_sign_in_ip

      t.timestamps null: false
    end

    add_index :users, :email,                unique: true
    add_index :users, :reset_password_token, unique: true
  end
end

Schema :

ActiveRecord::Schema.define(version: 20170727071936) do

  create_table "comments", force: :cascade do |t|
    t.string "content"
    t.boolean "done"
    t.integer "post_id"
    t.integer "user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["post_id"], name: "index_comments_on_post_id"
    t.index ["user_id"], name: "index_comments_on_user_id"
  end

  create_table "companies", force: :cascade do |t|
    t.string "name"
    t.string "ref"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "groupes_admins", force: :cascade do |t|
    t.integer "user_id"
    t.integer "group_id"
    t.index ["group_id"], name: "index_groupes_admins_on_group_id"
    t.index ["user_id"], name: "index_groupes_admins_on_user_id"
  end

  create_table "groups", force: :cascade do |t|
    t.string "name"
    t.integer "cat"
    t.boolean "main"
    t.boolean "perso"
    t.integer "effectif", default: 0
    t.integer "elm", default: 0
    t.integer "elm_d", default: 0
    t.integer "date_cat"
    t.integer "date_id"
    t.datetime "date"
    t.integer "company_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["company_id"], name: "index_groups_on_company_id"
  end

  create_table "posts", force: :cascade do |t|
    t.text "content"
    t.boolean "attached"
    t.integer "attached_cat"
    t.integer "attached_id"
    t.boolean "done"
    t.datetime "done_at"
    t.integer "done_cat"
    t.integer "donner_id"
    t.datetime "upd_at"
    t.integer "upd_cat"
    t.integer "updater_id"
    t.string "title"
    t.date "deadline"
    t.integer "group_id"
    t.integer "user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["group_id"], name: "index_posts_on_group_id"
    t.index ["user_id"], name: "index_posts_on_user_id"
  end

  create_table "requests", force: :cascade do |t|
    t.integer "user_id"
    t.integer "group_id"
    t.datetime "validate_at"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["group_id"], name: "index_requests_on_group_id"
    t.index ["user_id"], name: "index_requests_on_user_id"
  end

  create_table "subtasks", force: :cascade do |t|
    t.string "title"
    t.datetime "date"
    t.boolean "finished"
    t.datetime "done_at"
    t.integer "done_id"
    t.integer "assign_id"
    t.integer "task_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["task_id"], name: "index_subtasks_on_task_id"
  end

  create_table "tasks", force: :cascade do |t|
    t.integer "user_id"
    t.integer "group_id"
    t.integer "post_id"
    t.string "title"
    t.datetime "date"
    t.boolean "done"
    t.integer "doner_id"
    t.datetime "done_at"
    t.boolean "assigned"
    t.integer "elm", default: 0
    t.integer "elm_d", default: 0
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["group_id"], name: "index_tasks_on_group_id"
    t.index ["post_id"], name: "index_tasks_on_post_id"
    t.index ["user_id"], name: "index_tasks_on_user_id"
  end

  create_table "tasks_users", force: :cascade do |t|
    t.integer "task_id"
    t.integer "user_id"
    t.index ["task_id"], name: "index_tasks_users_on_task_id"
    t.index ["user_id"], name: "index_tasks_users_on_user_id"
  end

  create_table "users", force: :cascade do |t|
    t.boolean "admin", default: false
    t.boolean "admin_c", default: false
    t.string "color"
    t.string "initial"
    t.string "name"
    t.string "surname"
    t.string "pseudo"
    t.integer "step"
    t.integer "company_id"
    t.string "email", default: "", null: false
    t.string "encrypted_password", default: "", null: false
    t.string "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer "sign_in_count", default: 0, null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string "current_sign_in_ip"
    t.string "last_sign_in_ip"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["company_id"], name: "index_users_on_company_id"
    t.index ["email"], name: "index_users_on_email", unique: true
    t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
  end

  create_table "users_groups", force: :cascade do |t|
    t.integer "user_id"
    t.integer "group_id"
    t.index ["group_id"], name: "index_users_groups_on_group_id"
    t.index ["user_id"], name: "index_users_groups_on_user_id"
  end

  create_table "users_posts", force: :cascade do |t|
    t.integer "post_id"
    t.integer "user_id"
    t.index ["post_id"], name: "index_users_posts_on_post_id"
    t.index ["user_id"], name: "index_users_posts_on_user_id"
  end

end
jacques Mesnet
  • 607
  • 3
  • 10
  • 1
    Same for me on heroku, I had to change host – stig Garet Jul 27 '17 at 22:44
  • 1
    two questions. is your `companies` migration before your `users` migration? and have you tried `rake db:schema:load` ? – m. simon borg Jul 27 '17 at 23:15
  • thanks for your comment @m. simon borg, I was not sure about that point. I made templates to start with devise implemented. And it's the first time that I have a other model before. I change the order of the migration files, and I ran db:schema:load as you said. And now it's much better. Thanks for your advices. Good continuation – jacques Mesnet Jul 28 '17 at 10:04
  • Great! I just put it in an official answer. If you felt like it helped you solve your problem please accept it – m. simon borg Jul 29 '17 at 14:56

2 Answers2

0

The error message suggests that you're trying to create a reference to companies on the users table but the companies table doesn't yet exist. Try making sure the order of your migrations is such that companies is created before users. You can also try just loading the schema all at once rather than migrating one at a time, with heroku run rake db:schema:load.

DISCLAIMER: rake db:schema:load will wipe all of your data. It is best used for setting up a new database. Never run it against a production database that already contains critical data. Once you have data you will need to do incremental migrations.

m. simon borg
  • 2,515
  • 12
  • 20
-1

Create the database first with rake db:create.

Eli Luvish
  • 70
  • 1
  • 4