2017-07-27 173 views
0

我想在heroku中第一次部署我的應用程序,我遇到了一個奇怪的錯誤。當我嘗試運行的Heroku耙分貝:遷移,我看到這個錯誤:Heroku部署失敗

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") 
) 

我已經驗證了一千遍我的遷移文件的用戶&公司,但似乎沒有壞。所以我真的不知道該怎麼做。我也嘗試所有的數據庫重置等。 例如在此answer。但是沒有任何東西能爲我工作。任何人都看過這個?在這一點上我真的很絕望。

PS:而且我還刪除了對pg和sql3的更改。

所以,我給你我的代碼,如果它是有用的發現問題

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 

公司遷移:

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

     t.timestamps 
    end 
    end 
end 

設計遷移:

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 

架構:

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 
+1

對於我在heroku上,我不得不改變主機 –

+1

兩個問題。是你的'用戶'遷移之前的'公司'遷移?並且你嘗試過'rake db:schema:load'嗎? –

+0

感謝您的評論@m。西蒙博格,我不確定這一點。我製作了模板,以實現設計開始。這是我第一次有另一種模式。我改變了遷移文件的順序,並且按照你的說法運行了db:schema:load。現在它好多了。感謝您的建議。好延續 –

回答

-1

rake db:create第一創建數據庫。

+0

我也嘗試,但是顯示此錯誤 細節:用戶沒有CONNECT權限。 –

+0

你不需要用Heroku創建數據庫。 「rake db:create」,「rake db:drop」,「rake db:reset」命令在Heroku平臺上不起作用 –

0

錯誤消息建議您嘗試在users表上創建對companies的引用,但companies表尚不存在。請嘗試確保您的遷移順序是在users之前創建的companies。您也可以嘗試一次加載架構,而不是一次遷移一個架構,使用heroku run rake db:schema:load

免責聲明:rake db:schema:load將擦除所有數據。它最好用於建立一個新的數據庫。切勿針對已包含關鍵數據的生產數據庫運行它。一旦你有數據,你將需要進行增量遷移。