【问题标题】:Error when migrating database to Heroku (NameError: Uninitialized constant)将数据库迁移到 Heroku 时出错(NameError:未初始化的常量)
【发布时间】:2014-06-17 07:34:56
【问题描述】:

我一直在我的机器上本地运行我的应用程序,并认为我已准备好将其推送到 Heroku。 (我有 SQL 用于开发/测试,但 PG 用于推荐。)我遇到的问题是,在过去,我有多个迁移创建了一个名为 companies 的设计模型,手动添加了属性company_id 到我的设计模型 users,将 companies 重命名为 accounts,并重命名 company_idaccount_id。当时进行所有这些迁移时,我的架构很好地反映了正在发生的事情。但是,现在我要同时为 Heroku 运行所有这些迁移,事情变得有点棘手。

具体错误:

1)

运行 rake db:migrate 附加到终端... up, run.4418 迁移到 AddCompanyIdToUsers (20140521170926) 耙中止! NameError: 未初始化的常量 AddCompanyIdToUsers

2)

rake 中止! 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

如您所见,我对我的一些决定有点犹豫不决,但认为执行上述迁移会更干净,但它似乎并不像我喜欢的那样顺利。如果需要,我可以使用我的架构进行更新。提前感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails heroku devise


    【解决方案1】:

    每个人都对数据库结构改变主意,这没什么大不了

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

    1. 检查你所有的migrations(不可能那么多?)
    2. 对于每次迁移,我都会确定发生了什么变化,并修改原始的 create 迁移以反映您的更改
    3. 对于您覆盖的迁移,我将删除 def change 方法中的所有内容(因此迁移为空白)
    4. git add . 所有这些修改后的迁移并部署到 heroku
    5. 运行heroku run rake db:migrate

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

    【讨论】:

    • 非常感谢您的反馈。我已经注释掉了上面每个迁移的内容,并使用 account_id 更新了创建用户迁移。尽管做了所有这一切,但对于上面的 20140521170926 迁移,我仍然遇到相同的错误(未初始化的常量)。只是好奇这里是否存在骆驼案问题。
    猜你喜欢
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多