wheneverって何
wheneverとは、Rubyでcronを走らせることのできるgemのこと。
Rails on whenever
bundle exec wheneverize .
ってやると、Railsでもごにょごにょできる。
Rails3でバッチ処理を実行する » Slowly Days
Railsでの導入と具体的なフローは上にまかせます。
こんな風に書いたのね。
config/schedule.rb
every 1.minutes do runner "Tasks::HelloWorld.execute", :output => {:error => 'log/error.log', :standard => 'log/cron.log'} end
エラー
taskを追加して、cronを走らせて、ログを見ると…
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require': cannot load such file -- bundler/setup (LoadError) from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require' from /Users/shige/projects/keio-line-rails/config/boot.rb:4:in `<top (required)>' from bin/rails:3:in `require_relative' from bin/rails:3:in `<main>'
うえうえ。
まてまて。
$ ruby -v ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin12.4.0]
のはずなのに。なぜ別のバージョンを見にいってるのか。
crontabを見る
* * * * * /bin/bash -l -c 'cd /Users/shige/projects/hoge-rails && bin/rails runner -e production '\''Tasks::HelloWorld.execute'\'' >> log/cron.log 2>> log/error.log'
このcron、bashで実行されてやがる。
上のrubyはzshで実行されているのだ。
なので、bashのrubyのバージョンを1.9.3にしたらうまくいきました。
まとめ
wheneverで登録されるcronってzshで実行できないのかな。