RailsでCronを簡単にするプラグインwhenever

RailsでCronを簡単にするプラグインwheneverのインストール手順
wheneverは、実行するタスクをわかりやすく書くことができ、Capistranoでデプロイする際にcrontabを更新してくれるプラグインです。

■インストール
sudo gem install whenever --no-ri --no-rdoc #本番環境の場合。

Bundlerの場合
gem 'whenever', :require => false

environment.rb内で ※Bundlerの場合不要
Rails::Initializer.run do |config|
 ・・・
 config.gem 'whenever', :lib => false, :source =>'http://gemcutter.org/'
end
Railsのディレクトリに移動してwhenerize .(※.を忘れずに)すると、cronの設定ファイルconfig/schedule.rbが作成される。

■設定
cd /my/rails/app
wheneverize .
[add] writing `./config/schedule.rb'
[done] wheneverized! #←これが表示されれば成功

schedule.rbの中身はこんな感じでサンプルコードが書いてあります。
every 2.hours do
 command "/usr/bin/some_great_command"
 runner "MyModel.some_method"
 rake "some:great:rake:task"
end

every 4.days do
 runner "AnotherModel.prune_old_records"
end
shedule.rbでcronの内容を設定したら、cron sytaxを出力するためにRailsアプリのフォルダ内でwheneverする。
whenever
注:'whenever'をオプションなしで実行すると、schdule.rbの置換結果だけを出力する。

crontabをアップデートして、確認
whenever --update-crontab
[write] crontab file updated

crontab -l
# Begin Whenever generated tasks for: /var/www/myapp/src/config/schedule.rb
* * * * * //var/www/myapp/script/runner -e production "RideShare.crontest"

■Capistranoの設定
config/deploy.rbを以下のような感じで設定
 after "deploy:symlink","deploy:update_crontab"

 namespace :deploy do
  desc "Update the crontab file"
  task :update_crontab, :roles => :db do
   run "cd #{release_path} && chmod 755 script/runner"
   run "cd #{release_path} && whenever --update-crontab #{application}"
  end
 end

2012/5/31追記 ver 0.7.3は以下でOK
set :whenever_command, "bundle exec whenever"
require "whenever/capistrano"

■テストしてみる
Capistranoでエラーなくデプロイできたら、サーバーに接続。
crontab -l #crontabの中身を確認
#10分おきに実行するような場合はこんな感じ
0,10,20,30,40,50 * * * * /home/www/public_html/rails_app/releases/20100513063216/script/runner -e production "Cronmodel.crontest"


#実行してみる。
/home/www/public_html/rails_app/releases/20100513063216/script/runner -e production "Cronmodel.crontest"
・・・実行結果
invalid option: -e
・・・
なぜかオプションエラーが出るが、実行はできている。-hでヘルプを表示すると、-eオプションが表示されるが・・・。
この点についてはローカルでも同様のため、原因がよく分からない・・・。

javan's whenever at master - GitHub
posted by digital-squad at 2010年04月06日 19時37分 | Comment(0) | TrackBack(0) | Ruby on Rails / Ruby
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック