一段代码能知道它是否在 Rails 请求的上下文中运行吗?



一段 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请求。

最新更新