2013年9月6日金曜日

Rails4.0でcron(バッチ処理)を動かす設定

rails4.0でバッチ処理を作成する手順のメモ

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





1 件のコメント:

  1. bundle wheneverize exec .

    bundle exec wheneverize .

    念のため。

    返信削除