在 Rails 中,您可能希望您的环境在启动时执行不同的操作,具体取决于您是否正在运行 rake 任务。例如,我的用例是在应用启动时将数百 MB 的缓存加载到内存中。我们显然不希望这发生在 rake 命令上。
---更新---以下是可靠的解决方案,适用于heroku。
is_rake = (ENV['RACK_ENV'].blank? || ENV['RAILS_ENV'].blank? || !("#{ENV.inspect}" =~ /worker/i).blank?)
在 Rails 中,您可能希望您的环境在启动时执行不同的操作,具体取决于您是否正在运行 rake 任务。例如,我的用例是在应用启动时将数百 MB 的缓存加载到内存中。我们显然不希望这发生在 rake 命令上。
---更新---以下是可靠的解决方案,适用于heroku。
is_rake = (ENV['RACK_ENV'].blank? || ENV['RAILS_ENV'].blank? || !("#{ENV.inspect}" =~ /worker/i).blank?)
如果您正在使用 heroku 并且您正在使用工作人员,这是一种更可靠的方法来进行此检查。
is_rake = (ENV['RACK_ENV'].blank? || ENV['RAILS_ENV'].blank? || !("#{ENV.inspect}" =~ /worker/i).blank?)
为了特殊情况运行迁移,我执行了以下操作:
if defined?(Rake) \
&& Rake.application.top_level_tasks.grep(/\Adb:migrate(\[[^\]]*\])?\z/).length > 0
...
end
特别是,它涵盖了我们没有运行的情况rake
。
Rake.application.top_level_tasks
设置rake
为参数列表(要执行的任务):
https://github.com/ruby/rake/blob/v13.0.3/exe/rake#L27
https://github.com/ruby/rake/blob/v13.0.3/lib/rake/application.rb#L81
https://github.com/ruby/rake/blob/v13.0.3/lib/rake/application.rb#L97
https://github.com/ruby/rake/blob/v13.0.3/lib/rake/application .rb#L751-L761