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

Pau*_*aul 10 ruby-on-rails initializer database-migration

令人惊讶的是,Rails的初始化程序在运行任何rake任务时运行,包括db:migrate和db:seed.

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

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

Pau*_*aul 7

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

unless ( File.basename($0) == 'rake')
   # Initializer code
end
Run Code Online (Sandbox Code Playgroud)

  • 显然,这取决于用“ rake”调用它。如果您开始对“ rails db:migrate”命令使用“ rails”或类似的命令,则将无法使用。 (4认同)

Ale*_*gel 6

如果您的初始化程序取决于特定表的创建子,则一种替代方法是使用进行检查ActiveRecord::Base.connection.table_exists? :mytable。