railsでバッチ処理を行うにはrails runnerやrakeを作成する方法があるようだ。
今回はrails runnerで作成した。
1.config/application.rbを修正してlib/tasks配下をオートロードの対象とする
1 2 3 4 5 6 7 8 9 10 11 | # config/application.rb module Project class Application < Rails::Application # ... # # lib配下をオートロードの対象とする config.autoload_paths += %W(#{config.root}/lib) end end |
2.実行ファイルをlib/tasks配下に作成
hoge_task.rb を作成
1 2 3 4 5 | class Tasks::HogeTask def self.execute puts "Hoge" end end |
3.作成したタスクを実行してみる
1 | rails runner Tasks::HogeTask.execute |
4.cronに登録する
cronの登録にはwheneverという便利なgemがあるのでそれを使用する。
4-1.インストール
wheneverをGemfileに記載してbundle install
1 2 | # Gemfile gem 'whenever', :require => false |
1 | bundle install |
4-2.configファイルの作成
1 2 3 | $ wheneverize . 上記でだめなら $ bundle wheneverize exec . |
4-3.cronで実行するコマンドを設定
(2013/9/7追記)実行環境の設定を追記
1 2 3 4 5 6 | # config/schedule.rb set :output, 'log/cron.log' set :environment, :development every 20.minute do runner 'Tasks:HogeTask.execute' end |
4-4.設定内容の確認
1 | bundle exec whenever |
4-5.cronへ登録
1 | bundle exec whenever --update-crontab |
以上でcronの登録は完了。
○その他のコマンド
・cronから登録を削除する
1 | bundle exec whenever --clear-crontab |
・時間の指定方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # 3時間ごと every 3.hours do runner "Tasks::HogeTask.execute" end # 毎日 AM5:00 every 1.day, :at => '5:00 am' do runner "Tasks::HogeTask.execute" end # 日曜日のPM5:00 every :sunday, :at => '5pm' do runner "Tasks::HogeTask.execute" end # 一時間ごと every :hour do runner "Tasks::HogeTask.execute" end # cron型の指定 every '0 0 1-5 * *' do runner "Tasks::HogeTask.execute" end |
bundle wheneverize exec .
返信削除↓
bundle exec wheneverize .
念のため。