Rails的初始化程序在运行任何rake任务时运行,包括db:migrate
和db:seed
,这是非常令人惊讶的。
我的应用程序中的初始化程序启动后台线程(一种工作进程),只有当应用程序在调试和生产模式下运行时才应该执行。
如何在执行rake db:migrate
时阻止特定的初始值设定项运行,或者如何在初始化程序中检测到rake任务正在运行?
答案 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