Railsでwheneverによるcronバッチ処理

スポンサーリンク

whenever は、cron ジョブを Ruby のシンタックスで簡潔に書くことができる gem です。whenever を利用すれば、定期的に cron で実行したいバッチ処理等を作成しやすく、また管理しやすくなります。使い方も簡単です。

https://github.com/javan/whenever

この記事は、Rails プロジェクトでの whenever 導入から、cron ジョブの作成・実行までの流れの説明となります。

— 環境 —
rails 5.0.0.1
whenever 0.9.7
capistrano 3.6.1

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

whenever をインストール

まずは whenever の gem をインストールします。Gemfile に追記後、bundle install。

Gemfile

初回インストール時は、cron ジョブを管理する config/schedule.rb を生成するために以下コマンドを実行します。

これで config/schedule.rb が生成されました。

実行させる cron ジョブを追加

続いて cron ジョブを Ruby のシンタックスで作成していきます。コードサンプルは、GitHub README のコード例を中心にコメントを追加しました。

config/schedule.rb

各々実行させたいモデルのクラスメソッドや Rake タスク等は、別途自力で実装する必要があります。

また、Rake タスクを実行させたい場合は、エラーが出るかもしれないので注意。エラーになった場合は下記エントリーをご参考ください。

wheneverで/bin/bash: bundle: command not foundエラー | EasyRamble

whenever で設定した cron ジョブの確認・更新・削除

whenever で追加した cron ジョブを確認します。

この段階では、まだ crontab には反映されません。crontab に反映するには、–update-crontab オプションを使う。

ここで crontab を確認すると whenever で設定したジョブが反映されるはずです。crontab 確認。

crontab に反映した cron ジョブを削除。

Capistrano デプロイ時に whenever による crontab を更新する

Capfile 内で whenever/capistrano を require させます。

Capfile

config/deploy.rb

続いて Capistrano 用デプロイスクリプト(config/deploy.rb)に以下を追加。

config/deploy.rb

これで Capistrano によるデプロイで、whenever でスケジューリング設定した cron ジョブが crontab に自動で反映されるようになります。

Capistrano でデプロイ実行。

production サーバーで crontab を確認して反映されていればOKです。今後は、config/schedule.rb を編集後にデプロイすると、crontab が自動で更新されます。

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
 
スポンサーリンク

Leave Your Message!