每当宝石与sinatra一起使用

时间:2014-01-23 10:23:32

标签: ruby cron sinatra whenever

#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]

1 个答案:

答案 0 :(得分:1)

问题似乎是rbenv,而不一定是sinatrawhenever。这解决了我的问题:

#schedlue.rb
command "cd #{Dir.pwd} && RACK_ENV=#{environment} rbenv exec bundle exec rake reports:generate"

通过添加rbenv exec,我们在运行rake任务之前成功加载了正确的ruby版本。