如果迁移不完整,我可以将Rails生产配置为在启动时失败吗?

时间:2016-09-28 23:16:06

标签: ruby-on-rails ruby

我们的登台服务器存在一些问题(登台环境几乎与生产相同),其中所有现有模型对象的计算属性值都不存在。当然,它适用于我的开发环境。

通过迁移插入值。问题是,由于它只是改变数据库中的数据并且不会改变模式的迁移类型,因此无法知道管理员是否忘记运行它。

与此同时,当您运行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开始运行迁移和其他情况之间的区别?

0 个答案:

没有答案