【问题标题】:Can't execute Rails rake task with cron无法使用 cron 执行 Rails rake 任务
【发布时间】:2014-08-12 10:53:14
【问题描述】:

我正在尝试使用 rvm 在 Ubuntu 上使用 cron 运行 rake 任务

我的crontab -l

* * * * * cd /media/sf_visa-tracker/ && /home/ruslan/.rvm/gems/ruby-2.1.0/bin/rake parse RAILS_ENV=production >> /var/log/visa-parse.log 2>&1

which rake

/home/ruslan/.rvm/gems/ruby-2.1.0/bin/rake

而且我的日志中不断出现此错误 (/var/log/visa-parse.log)

/usr/bin/env: ruby_executable_hooks: No such file or directory

另外,如果我从终端运行cd /media/sf_visa-tracker/ && /home/ruslan/.rvm/gems/ruby-2.1.0/bin/rake parse RAILS_ENV=production,rake 任务可以工作。

请帮忙;)

【问题讨论】:

标签: ruby-on-rails ruby cron


【解决方案1】:

将 rvm 与 cron 一起使用的最简单方法是使用 rvm's wrappers。您的 shell 在启动时设置了一大堆与 rvm 相关的环境,而您的 cron 作业中缺少这些环境。包装器是 Ruby 相关命令的版本,可以为您处理这些问题。

在这种情况下,如果您已将 rvm 安装到 /usr/local,您的 cron 作业应如下所示:

* * * * * cd /media/sf_visa-tracker/ && /usr/local/rvm/wrappers/ruby-2.1.0/bin/rake parse RAILS_ENV=production >> /var/log/visa-parse.log 2>&1

您还可以将您的 rvm 设置捆绑到一个 shell 脚本中,该脚本在调用 rake 之前加载 rvm; rvm's documentation on working with cron 中提供了这两种方法的更多详细信息。

【讨论】:

【解决方案2】:

我努力寻找一些有效且看起来干净的东西。如果有帮助,我最终会这样做。

crontab 0 5 * * * /home/deploy/apps/myproject/shared/cron/daily_updates.sh

由于我使用的是 Capistrano,因此我将脚本放在了 myproject/shared 中,这似乎是一个存放在不同版本之间持续存在的东西的好地方。

shared/cron/daily_updates.sh

#!/usr/bin/env bash # 你需要在更新 ruby​​ 版本时更新它 源 /home/deploy/.rvm/environments/ruby-2.3.1@myproject # 因为我有一个单独的地方存放 Rails 特定的环境变量(例如秘密、应用程序密钥) # 你应该将该文件的权限设置为所有者只读/只写 源 /home/deploy/.rails_env cd /home/deploy/apps/myproject/current rake RAILS_ENV=production daily_update:send_updates 2>&1

【讨论】:

  • 我建议你使用 github.com/javan/whenever 更清洁和更简单的解决方案:)
猜你喜欢
  • 2012-07-19
  • 2012-09-02
  • 2011-03-04
  • 2011-12-03
  • 2014-05-27
  • 2012-04-20
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多