耙子在cronjob中运行不正常

时间:2009-06-05 15:52:53

标签: ruby cron rake

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

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

你有吗

require 'rubygems'
在你的脚本中

?例如。 irb默认加载rubygems,而正常执行需要显式 import

答案 2 :(得分:0)

首先:require "json"可能失败,因为没有加载rubygems。您可以通过将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

答案 3 :(得分:0)

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