6

在 Rails 中,您可能希望您的环境在启动时执行不同的操作,具体取决于您是否正在运行 rake 任务。例如,我的用例是在应用启动时将数百 MB 的缓存加载到内存中。我们显然不希望这发生在 rake 命令上。

---更新---以下是可靠的解决方案,适用于heroku。

is_rake = (ENV['RACK_ENV'].blank? || ENV['RAILS_ENV'].blank? || !("#{ENV.inspect}" =~ /worker/i).blank?)
4

2 回答 2

1

如果您正在使用 heroku 并且您正在使用工作人员,这是一种更可靠的方法来进行此检查。

is_rake = (ENV['RACK_ENV'].blank? || ENV['RAILS_ENV'].blank? || !("#{ENV.inspect}" =~ /worker/i).blank?)
于 2013-05-03T22:05:05.207 回答
0

为了特殊情况运行迁移,我执行了以下操作:

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

于 2021-04-27T16:37:11.660 回答