Rails 4如何忽略挂起的迁移

Wat*_*ink 48 ruby activerecord ruby-on-rails

问题如下:

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

结果是:

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

我想以某种方式告诉rake忽略挂起的迁移,但到目前为止无法做到这一点.

更新(由于额外的经验)

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

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

class DoSomethingCool < ActiveRecord::Migration
  def change
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

whi*_*eed 134

我不太确定这对你有帮助.但我正在找东西,发现了这个问题.所以看起来这可能会有所帮助:

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

 config.active_record.migration_error = false#:page_load
Run Code Online (Sandbox Code Playgroud)

在我的情况下,它现在不再显示挂起的迁移错误.应该适用于相同环境的rake任务和控制台.

  • 您也可以在配置文件中注释掉整行. (6认同)
  • 对于快速临时解决方法来测试/修复某些内容,这是一个很好的解决方案.更改配置文件后,请不要忘记重新启动本地rails服务器. (5认同)
  • In fact, this should be the accepted answer. (3认同)
  • 似乎在 Rails 5.2 中不起作用(在本地加载种子时) (2认同)

mir*_*lon 26

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

20140730091353_migration_name.rb
Run Code Online (Sandbox Code Playgroud)

.20140730091353_migration_name.rb
Run Code Online (Sandbox Code Playgroud)

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

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

如果之后有更多迁移,则必须重命名所有迁移,或者只是暂时移动它.


Dan*_*ahn 12

Rails将迁移信息存储在一个名为的表中schema_migrations.

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

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

[version]_Create_Awesome.rb
Run Code Online (Sandbox Code Playgroud)