何ができるか

Railsでcronのバッチを作成して、定期的に回すことができます。

公式リポジトリ

whenever

wheneverをインストール

Gemfile
gem 'whenever', :require => false
$ bundle install --path vendor/bundle

設定ファイルを作成

$ bundle exec wheneverize . 
    [add] writing `./config/schedule.rb'
    [done] wheneverized! 

config/schedule.rb に設定を記述します。

config/schedule.rb
require File.expand_path(File.dirname(__FILE__) + "/environment")
set :output, 'log/cron.log'

# 1分毎に回す
every 1.minute do
  command "echo 'mossmossmossmossmossmoss'"
end

every 3.hours do
  runner "MyModel.some_process"
  rake "my:rake:task"
  command "/usr/bin/my_great_command"
end

# every 1.day, :at => '4:30 am' do
#   runner "MyModel.task_to_run_at_four_thirty_in_the_morning"
# end

# every :hour do # Many shortcuts available: :hour, :day, :month, :year, :reboot
#   runner "SomeModel.ladeeda"
# end

# every :sunday, :at => '12pm' do # Use any day of the week or :weekend, :weekday
#   runner "Task.do_something_great"
# end

# every '0 0 27-31 * *' do
#   command "echo 'you can use raw cron syntax too'"
# end

cronに反映する際のコマンド

  • 設定の確認
$ bundle exec whenever 
$ bundle exec crontab -e
  • cronにデータを反映
$ bundle exec whenever --update-crontab 
  • cronからデータを削除
$ bundle exec whenever --clear-crontab

これで定期的にバッチを回せます。

CapistranoでWhenever

デプロイ時に、本番環境にもcronの値をセットしたい時は、Capistranoの設定ファイルに下記を追記します。

config/deploy.rb
set :whenever_command, "bundle exec whenever"
require "whenever/capistrano"

これで cap deploy を行なえば、デプロイ先のcrontabに値が反映されます。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.