【问题标题】:Rake not running properly in cronjobRake 在 cronjob 中无法正常运行
【发布时间】:2010-10-31 16:41:53
【问题描述】:

我有一个 rake 文件,可以在命令行成功执行。当我设置一个 cronjob 来运行这个 rake 文件时,“require 'json'”行失败了。我的猜测是 cronjob 有一个不同的环境变量。当我尝试将“puts ENV”放入 ruby​​ 脚本时,它不起作用。所以我想知道我应该怎么做来检查不同的环境变量以及如何解决这个问题。谢谢。

【问题讨论】:

    标签: ruby cron rake


    【解决方案1】:

    这可能是您在 cron 中调用它的方式。这对我有用:

    cd /full/path/to/rails_root && /full/path/to/rake RAILS_ENV=production my:task
    

    【讨论】:

      【解决方案2】:

      你有吗

      require 'rubygems'
      

      在你的脚本中?例如。 irb 默认加载 ruby​​gems,而 正常 执行需要显式 import

      【讨论】:

      • 是的,我确实需要'rubygems'。如果我在命令行运行,rake data.rake,没问题。错误只发生在 cronjob 中。
      【解决方案3】:

      首先:require "json" 可能失败,因为 ruby​​gems 未加载。您可以通过将require 'rubygems' 放在顶部,或者将RUBYOPT=rubygems 添加到 cron 作业命令行的前面或 cron 的环境(通常可以在 crontab 中设置环境变量)来解决这个问题。

      回答您的ENV 调试问题:puts ENV 是否可能因为 stdout 被重定向到您在 cron 作业期间不知道的某个位置(它肯定无法转到您的终端)而无法正常工作?您可以尝试以下方法:

      File.open('/tmp/debug_env', 'w') do |f|
        f.puts ENV.to_hash.inspect
      end
      

      然后看看/tmp/debug_env 看看那里有什么。需要特别注意的环境变量是$USER$GEM_HOME$GEM_PATH$RUBYOPT

      【讨论】:

      • 首先我确实加载了 ruby​​gems,其次,我尝试了您的建议,将 RUBYOPT=rubygems 添加到 cronjob 的前面,同样的错误。我试试ENV调试。
      【解决方案4】:

      另一种方式:编写一个包装脚本以从 cron 运行: 第一行 - 加载您的 .profile (或 .bash_profile 等) 第二行 - 运行你的 rake 脚本

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-19
        • 1970-01-01
        • 2018-12-21
        • 2011-10-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多