Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
68
Help us understand the problem. What is going on with this article?
@azusanakano

【Rails 4】delayed_jobを使う

More than 5 years have passed since last update.

Rails 4(ActiveRecord)でdelayed_jobを使います。

Gemfile作成

Gemfile
gem "delayed_job"
gem "delayed_job_active_record"

# デプロイ先でデーモンとして動かすのに必要
gem "daemons"

インストールとマイグレーション

bundle install
bundle exec rails generate delayed_job:active_record
bundle exec rake db:migrate

実行ファイルはbin/delayed_jobに作成されます。
Rails3以前はscript/delayed_jobに作られていたので要注意なのです。

ワーカーはrakeタスクで手軽に起動できます。
開発環境ではこれでテストしましょう。

bundle exec rake jobs:work

非同期処理を実装
キューに入れたいメソッドは次のようにdelayを挟んで呼び出します。

SomeClass.delay.some_method(args)

例えば、Twitterのような外部サイトへツイートするような以下の処理がある場合、

@user.tweet('Hi!')

@user.delay.tweet('Hi!')

とするだけなのです。

デプロイ環境ではdelayed_jobコマンドでプロセスを開始したり停止したりします。

以下の様なスクリプトファイルを作っておくと便利です。

tools/delayed_job.sh
#!/bin/bash
bundle exec ../bin/delayed_job $1

アプリケーションディレクトリ配下にtools/というディレクトリを作っておき、その中にdelayed_jobs.shを入れておきます。

# 開始
tools/delayed_jobs.sh start

# 停止
tools/delayed_jobs.sh stop

# 再起動
tools/delayed_jobs.sh restart

などと出来ます。

Rails 3ではdelayed_jobの位置がscript/配下になるので適宜、修正して下さい。

設定ファイル

config/initializers/delayed_job_config.rb
Delayed::Worker.destroy_failed_jobs = false # 失敗したジョブをDBから削除しない=false
Delayed::Worker.sleep_delay = 60 # 実行ジョブがない場合に次回実行までのSleep時間(秒)
Delayed::Worker.max_attempts = 3 # リトライ回数
Delayed::Worker.max_run_time = 5.minutes # 最大実行時間

ログファイル
delayed_jobsワーカーのログはlog/delayed_job.logに出力されます。


あと、関係ないけどなのですちゃん可愛い

xx.png

68
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
azusanakano
中野システム研究所、所長(仮) 東京四念処禅道場、師範(仮)

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
68
Help us understand the problem. What is going on with this article?