Ruby on rails 迁移数据库时Rails初始值设定项正在运行

Ruby on rails 迁移数据库时Rails初始值设定项正在运行,ruby-on-rails,database-migration,initializer,Ruby On Rails,Database Migration,Initializer,Rails的初始值设定项在运行任何rake任务时运行,包括db:migrate和db:seed,这是非常令人惊讶的 我的应用程序中的初始值设定项启动一个后台线程(一种工作进程),只有当应用程序在调试和生产模式下运行时,它才应该执行 如何在执行rake db:migrate时防止特定初始值设定项运行,或者如何在初始值设定项中检测rake任务正在运行?迁移需要加载您的环境,初始值设定项是环境的一个组成部分。如果您需要在迁移期间不运行初始值设定项,那么它可能位于错误的位置 如果您无法将其移动到其他位置

Rails的初始值设定项在运行任何rake任务时运行,包括
db:migrate
db:seed
,这是非常令人惊讶的

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


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

迁移需要加载您的环境,初始值设定项是环境的一个组成部分。如果您需要在迁移期间不运行初始值设定项,那么它可能位于错误的位置


如果您无法将其移动到其他位置,那么这个答案()可能会有所帮助。

以下是一个如何防止初始值设定项在Rake任务中运行的解决方案:

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

如果您的初始值设定项依赖于特定表的创建,一种替代方法是使用
ActiveRecord::Base.connection.table_exists?进行检查:mytable

迁移需要加载您的环境,初始值设定项是环境不可或缺的一部分。如果您需要在迁移过程中不运行初始值设定项,那么它可能位于错误的位置。Matt,“别处”是什么?要求:我需要在应用程序启动时运行线程,在迁移时不需要它。在何处放置线程开始不必处理额外的命令行参数,如关于快速迁移的回答?这显然取决于使用“rake”调用它。如果您开始在命令
railsdb:migrate
或类似的命令中使用“rails”,这将不起作用。