问题如下:
我有 db/seed.rb 充满了初始数据。
迁移之一取决于此种子提供的数据。
我正在尝试从空数据库部署我的应用程序。
结果是:
RAILS_ENV=production rake db:migrate - 由于缺少初始数据而失败
RAILS_ENV=production 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
我不太确定这是否会对您有所帮助。但我一直在寻找一些东西,发现了这个问题。所以看起来这可能会有所帮助:
在 RAILS_ROOT/config/environments/development.rb 中将以下设置设置为 false:
config.active_record.migration_error = false#:page_load
在我的情况下,它现在不再显示挂起的迁移错误。也应该适用于相同环境的 rake 任务和控制台。
根据以下数据重命名迁移:
20140730091353_migration_name.rb
至
.20140730091353_migration_name.rb
(在文件名的开头添加一个点)
然后运行 rake db:seed
(它将不再抱怨挂起的迁移),然后重命名迁移。
如果您之后有更多迁移,则必须重命名所有迁移,或者只是暂时将其移走。
Rails 将迁移信息存储在名为 schema_migrations
的表中。
您可以将迁移中的版本添加到该表中以跳过特定迁移。
版本是文件名中描述之前的数字字符串。
[version]_Create_Awesome.rb
我有一个类似的问题。我注释掉了 add_column 行并运行了 rake db:migrate 命令,然后在测试或生产环境需要它时删除了该注释。
除非你修改 Rails 代码,否则没有办法。我强烈建议您改为修复迁移。
迁移不应依赖于数据库中是否存在某些数据。它可以依赖于以前的迁移,但当然绝对不依赖于数据库上的数据。
如果您在尝试从 正在运行的 Rails 应用程序中植入数据时遇到“待迁移”问题,您可以直接调用它来避免 abort_if_pending_migrations
检查:
ActiveRecord::Tasks::DatabaseTasks.load_seed
查看从 ActiveRecord 中实际调用种子的位置:
并查看 DatabaseTasks 文档:
https://apidock.com/rails/v6.0.0/ActiveRecord/Tasks/DatabaseTasks https://apidock.com/rails/v6.0.0/ActiveRecord/Tasks/DatabaseTasks/load_seed