一段 Ruby 代码是否有可能知道它是否在 Ruby on Rails 请求的上下文中运行(例如,作为后台作业或 rake 任务)?
您可以尝试通过特殊全局变量的值或存在来区分是否在 rake 任务中执行某些内容:
task :tryout do
if File.basename($0) == 'rake'
puts 'It is a rake task.'
end
end
在前面的代码片段中,依赖于以 rake
结尾的可执行文件的$0
路径。在以前的 Rails 版本中有一个$rails_rake_task
变量,但在我当前的环境中没有定义它(我已经在 Rails 4 上尝试过)。
在 Rails 控制器中,您可以检查是否有来自全局变量或ActionDispach::Request
请求对象的用户请求$CGI_ENV
请求。