簡體   English   中英

將數據庫遷移到Heroku時出錯(NameError:未初始化的常量)

[英]Error when migrating database to Heroku (NameError: Uninitialized constant)

我已經在計算機上本地運行了我的應用程序,並認為我已經准備好將其推送到Heroku。 (我建議在開發/測試上使用SQL,但建議使用生產上的PG。)我遇到的問題是,在過去,我進行了多次遷移,這些遷移創建了一個名為Companies的Devise模型,並向我的Devise模型用戶手動添加了屬性company_id ,將公司重命名為account ,並將company_id重命名為account_id 那時,當進行所有這些遷移時,我的架構很好地反映了正在發生的事情。 但是,現在我為Heroku一次運行所有這些遷移,事情變得有些繁瑣。

具體錯誤:

1)

正在運行rake db:migrate附加到終端...啟動,運行4418遷移到AddCompanyIdToUsers(20140521170926)rake已中止! NameError:未初始化的常量AddCompanyIdToUsers

2)

耙子流產了! ActiveRecord :: DuplicateMigrationNameError:多個遷移的名稱為AddAccountIdToUsers

具體解決方案

根據對其他SO問題的回答,我嘗試了不同的方法:由於它們不再相關,因此我嘗試銷毀上述遷移。 我嘗試將遷移回滾到先前的遷移,刪除問題的遷移文件,然后再次遷移數據庫。 我還嘗試過在遷移中重命名遷移文件和/或類名稱,在遷移中重命名模型名稱。 一切都無濟於事。

相關遷移

20140521170926_add_company_id_to_users.rb

class AddCompanyIdToUsers < ActiveRecord::Migration
  def change
    add_column :users, :account_id, :integer
  end
end

20140527013603_rename_companies_to_accounts.rb

class RenameCompaniesToAccounts < ActiveRecord::Migration
  def change
    rename_table :companies, :accounts
  end
end

20140610013557_remove_account_id_from_users.rb

class RemoveAccountIdFromUsers < ActiveRecord::Migration
  def change
    remove_column :users, :account_id, :integer
  end
end

20140614021611_add_account_id_to_users.rb

class AddAccountIdToUsers < ActiveRecord::Migration
  def change
    add_column :users, :account_id, :integer
  end
end

如您所見,我對自己的某些決定有些猶豫不決,但認為執行上述遷移操作會比較干凈,但似乎運行得並不理想。 如果需要,我可以更新自己的架構。 在此先感謝您的幫助!

每個人都通過數據庫結構改變主意,這沒什么大不了的

如果我是你,我會這樣做:

  1. 經歷所有的migrations (不會那么多嗎?)
  2. 對於每個遷移,我將確定發生了什么變化,並修改原始的create遷移以反映您的更改
  3. 對於您覆蓋的遷移,我將刪除def change方法內的所有內容(因此遷移為空白)
  4. git add . 所有這些經過改進的遷移並部署到heroku
  5. 運行heroku run rake db:migrate

盡管應該花費一些時間來修改所有原始遷移,但這應該可以解決您的錯誤!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM