Rails初始化程序在迁移数据库时正在运行

时间:2014-06-10 08:30:07

标签: ruby-on-rails database-migration initializer

Rails的初始化程序在运行任何rake任务时运行,包括db:migratedb:seed,这是非常令人惊讶的。

我的应用程序中的初始化程序启动后台线程(一种工作进程),只有当应用程序在调试和生产模式下运行时才应该执行。

如何在执行rake db:migrate时阻止特定的初始值设定项运行,或者如何在初始化程序中检测到rake任务正在运行?

3 个答案:

答案 0 :(得分:7)

以下是如何防止初始化程序在Rake任务中运行的解决方案:

unless ( File.basename($0) == 'rake')
   # Initializer code
end

答案 1 :(得分:1)

迁移需要加载环境,初始化程序是环境不可或缺的一部分。如果您需要在迁移期间不运行初始化程序,那么它可能位于错误的位置。

如果你无法将其移到别处,那么这个答案(create a 'fast migrate' rake task)可能会有所帮助。

答案 2 :(得分:0)

要解决这个问题,我这样做:

if ActiveRecord::Base.connection.table_exists? :settings # check if table exists
  if Setting.first.present? # check if first record has been seeded
    NUMBERS = Setting.first.my_numbers.split(",")
  else
    NUMBERS = '987654321'
  end
else
  NUMBERS = '123456789'
end