ruby-Rails 4如何忽略挂起的迁移

问题如下:

  • 我有db / seed.rb完整的初始数据。
  • 迁移之一取决于此种子提供的数据。
  • 我正在尝试从空数据库部署我的应用程序。

结果是:

  • RAILS_ENV =生产佣金db:migrate-由于缺少初始数据而失败
  • RAILS_ENV =生产佣金db:seed-由于挂起的迁移而失败

我想以某种方式告诉rake忽略挂起的迁移,但到目前为止无法完成。

更新(由于其他经验)

有时迁移和模型代码不同步,因此无法运行迁移。为避免此问题,最近在迁移中使用了模型的重新定义:

# reset all callbacks, hooks, etc for this model
class MyAwesomeModel < ActiveRecord::Base
end

class DoSomethingCool < ActiveRecord::Migration
  def change
    ...
  end
end
Waterlink asked 2020-02-13T11:02:06Z
5个解决方案
133 votes

我不太确定这是否对您有帮助。 但是我在找东西,发现了这个问题。 因此,这看起来可能会有所帮助:

在RAILS_ROOT / config / environments / development.rb中将以下设置设置为false:

 config.active_record.migration_error = false#:page_load

在我的情况下,它现在不再显示挂起的迁移错误。 应该也可以用于rake任务,也可以在同一环境中使用控制台。

whizcreed answered 2020-02-13T11:02:58Z
26 votes

根据以下数据重命名迁移:

20140730091353_migration_name.rb

.20140730091353_migration_name.rb

(在文件名的开头添加一个点)

然后运行rake db:seed(它将不再抱怨挂起的迁移),然后重新命名迁移。

如果之后有更多迁移,则必须重命名所有迁移或只是暂时移走。

mirelon answered 2020-02-13T11:03:36Z
12 votes

Rails将迁移信息存储在名为schema_migrations的表中。

您可以将迁移中的版本添加到该表中,以跳过特定迁移。

版本是文件名中描述之前的数字字符串。

[version]_Create_Awesome.rb
Dan Grahn answered 2020-02-13T11:02:29Z
2 votes

除非您猴子修补Rails代码,否则没有其他方法。 我强烈建议您改正您的迁移。

迁移不应依赖于数据库中某些数据的存在。 它可以取决于以前的迁移,但是当然绝对不取决于数据库上的数据。

Simone Carletti answered 2020-02-13T11:04:01Z
2 votes

我有一个类似的问题。 我注释掉了add_column行并运行rake db:migrate命令,然后在测试或生产环境需要它时删除了注释。

siva answered 2020-02-13T11:04:21Z
translate from https://stackoverflow.com:/questions/20244244/rails-4-how-to-ignore-pending-migrations