#config/scheduler.rb
set :output, 'log/cron.log'
every 1.minutes do
rake 'reports:generate'
end
当我运行crontab -l
时,我得到以下输出:
* * * * * /bin/bash -l -c 'cd <path-to-app> bundle exec rake reports:generate --silent >> log/cron.log 2>&1'
首先,它似乎使用我的system ruby
1.8.7
,有没有办法改变这个?
其次,该任务未运行,但我cron.log
中出现的唯一内容如下:
Your Ruby version is 1.8.7, but your Gemfile specified 2.0.0
我已经尝试puts
到日志没有成功,所以我基本上不知道发生了什么。似乎任务正在启动,但是在没有任何内容写入日志的情况下失败。我不知道如何调试这个,所以请帮助。
我在OS X上,我的应用程序在Sinatra上运行。
编辑:我正在使用rbenv
来管理我的ruby版本,所以我想我必须告诉cron作业以某种方式加载rbenv?当我cd
进入应用程序的文件夹并运行ruby -v
时,我得到了
ruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-darwin12.5.0]
答案 0 :(得分:1)
问题似乎是rbenv
,而不一定是sinatra
或whenever
。这解决了我的问题:
#schedlue.rb
command "cd #{Dir.pwd} && RACK_ENV=#{environment} rbenv exec bundle exec rake reports:generate"
通过添加rbenv exec
,我们在运行rake任务之前成功加载了正确的ruby版本。