1

我有一个 rake 任务,我想每天执行一次:在生产中安装了 rvm

schedule.rb我有

set :output, "/home/username/data/public_html/log/cron_log.log"
every 24.hours do
  rake "fetch:smth"
end

crontab -l 显示:

MAILTO="my.mail@gmail.com"
PATH="/usr/local/rvm/rubies/ruby-1.9.3-p125/bin/ruby "
@daily cd /home/username/data/www/nameofsite.com && RAILS_ENV=production bundle   exec rake fetch:smth

真的,我有点困惑,因为以前我没有使用 cron 的经验,所以请帮忙。

编辑#1

我已经运行了 rvm env -- path 1.9.3@global 它给了我:

PATH="/usr/local/rvm/gems/ruby-1.9.3-p125/bin:/usr/local/rvm/gems/ruby-1.9.3-p125@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p125/bin:/usr/local/rvm/bin:$PATH"

然后我

MAILTO="said.kaldybaev@gmail.com"
PATH="/usr/local/rvm/gems/ruby-1.9.3-p125/bin:/usr/local/rvm/gems/ruby-1.9.3-p125@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p125/bin:/usr/local/rvm/bin:$PATH"
@daily  RAILS_ENV=production rake rate:fetch

当我从 ISPmanager 运行执行时,它给了我:Exited with return code = 1下面 的链接说如果退出错误是 1,那么已经有一个 /var/run/cron.pid 文件。这是真的,但我没有root权限

4

1 回答 1

2

schedule.rb如果您从 cron 调用任务,则不需要。这由@dailycrontab 中的条目处理。只需将日志文件名称设置为环境变量并让 rake 任务引用它。$PATH除了 ruby​​ 二进制文件的路径之外,您可能还需要更多内容,否则bundle将找不到。当您提供红宝石的路径时,您实际上并没有为 RVM 选择它来了解您的意思,因此它无法找到正确的 gemset。RVM 提供了为此类任务做正确事情的包装器 - 替换bundle exec/usr/local/rvm/wrappers/ruby-1.9.3-p125 -S bundle exec它应该可以工作。

希望能给你一些想法。这里还有更多。

更新#1

使用 Edit #1,您已经解决了一个问题并创建了另一个问题。您仍然需要到cdapp 目录,否则 rake 将找不到 Rakefile。

于 2012-03-13T07:01:42.033 回答