我正在尝试使用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任务有效。
请帮助;)
答案 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