我们的登台服务器存在一些问题(登台环境几乎与生产相同),其中所有现有模型对象的计算属性值都不存在。当然,它适用于我的开发环境。
通过迁移插入值。问题是,由于它只是改变数据库中的数据并且不会改变模式的迁移类型,因此无法知道管理员是否忘记运行它。
与此同时,当您运行Rails测试时,如果尚未运行任何迁移,它将拒绝运行测试。这听起来像是应该为生产做的事情。我不确定为什么它不是默认值,但是有什么方法可以做到吗?
更新
我觉得我大部分都是想弄明白这一点。有一个db:abort_if_pending_migrations
任务。我无法使用该任务,因为我不知道系统管理员是否会绕过该任务,但其中的代码很有用。
所以在初始化中,我把:
pending_migrations = ActiveRecord::Migrator.open(ActiveRecord::Tasks::DatabaseTasks.migrations_paths).pending_migrations
if pending_migrations.any?
puts "You have #{pending_migrations.size} pending #{pending_migrations.size > 1 ? 'migrations:' : 'migration:'}"
pending_migrations.each do |pending_migration|
puts ' %4d %s' % [pending_migration.version, pending_migration.name]
end
abort %{Run `rails db:migrate` to update your database then try again.}
end
这确实有效。但现在有一个新问题 - 我也无法运行db:migrate
,因为迁移也会运行初始化程序!
有没有一种好的方法来区分Rails开始运行迁移和其他情况之间的区别?