将数据库迁移到Heroku时出错(NameError:未初始化的常量)

时间:2014-06-17 07:34:56

标签: ruby-on-rails heroku devise

我一直在我的机器上本地运行我的应用程序,并认为我已准备好将其推送到Heroku。 (我有关于开发/测试的SQL,但是生产中的PG是推荐的。)我遇到的问题是,在过去,我有多个迁移创建了一个名为 companies 的Devise模型,手动添加了属性 company_id 到我的Devise模型用户,将公司重命名为帐户,并重命名为 company_id account_id 。当时进行所有这些迁移时,我的模式很好地反映了正在发生的事情。但是现在我正在为Heroku一次运行所有这些迁移,事情变得有些毛茸茸。

特定错误:

1)

运行rake db:migrate attach to terminal ... up,run.4418 迁移到AddCompanyIdToUsers(20140521170926) 耙子流产了! 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 个答案:

答案 0 :(得分:0)

每个人都用数据库结构改变主意,这不是什么大问题

如果我是你,我会这样做:

  
      
  1. 浏览所有migrations 很多?)
  2.   
  3. 对于每次迁移,我都会确定更改内容,并修改原始create迁移以反映您的更改
  4.   
  5. 对于您覆盖的迁移,我会删除def change方法中的所有内容(因此迁移为空白)
  6.   
  7. git add .所有这些修改后的迁移&amp;部署到heroku
  8.   
  9. 运行heroku run rake db:migrate
  10.   

这应该可以解决您的错误,但修改所有原始迁移可能需要一些时间!