2

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

4

4 回答 4

3

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

cd /full/path/to/rails_root && /full/path/to/rake RAILS_ENV=production my:task
于 2009-06-05T16:21:25.553 回答
0

首先: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.

于 2009-06-05T16:05:04.270 回答
0

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

于 2009-06-05T16:23:01.203 回答
0

你有

require 'rubygems'

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

于 2009-06-05T15:54:23.863 回答