无法使用cron执行Rails rake任务

时间:2014-08-12 10:53:14

标签: ruby-on-rails ruby cron

我正在尝试使用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任务有效。

请帮助;)

2 个答案:

答案 0 :(得分:3)

将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中有两种方法的更多细节。

答案 1 :(得分:0)

我努力想要得到一些有效且看起来干净的东西。这是我最终做的事情,以防它有所帮助。

<强>的crontab 0 5 * * * /home/deploy/apps/myproject/shared/cron/daily_updates.sh

我将脚本放在myproject / shared中,因为我正在使用Capistrano,这似乎是一个在发布之间会持续发生的事情的好地方。

<强>共享/ cron的/ daily_updates.sh

#!/usr/bin/env bash

# You will need to update this as you bump ruby versions
source /home/deploy/.rvm/environments/ruby-2.3.1@myproject

# Since I had a separate place for Rails specific environment variables (e.g. secrets, app keys)
# you should set the permissions on that file to be owner read/write only
source /home/deploy/.rails_env

cd /home/deploy/apps/myproject/current
rake RAILS_ENV=production daily_update:send_updates 2>&1