Rails
delayed_job

DelayedJobで使用するテーブルを変更する方法

非同期処理を実現するgem、DelayedJobはMySQLやPostgreSQLなどのRDMSを使ってキューイングを行う(MongoDBも使えるようだが)

このキューイングするデータベースのテーブルはデフォルトでdelayed_jobsに固定されている。
今回はこのテーブルをデフォルトから変更する場合の修正箇所を紹介する。

今回の施策は、モノリシックなRailsをマルチテナント利用するような場合に使う場合があるだろう。

各gemバージョンについて

  • rails: 5.1.4
  • delayed_job: 4.1.3
  • delayed_job_active_record: 4.1.2

修正箇所 config/application.rb

Delayed::Backend::ActiveRecord::Job.table_nameをconfig.after_initializeブロック内で変更する。

例えば、DelayedJobで実行するデフォルトのテーブルdelayed_jobsからanother_delayed_jobsに変更したい場合

config/application.rb
module ApplicationName
  class Application < Rails::Application
    config.after_initialize do
      Delayed::Backend::ActiveRecord::Job.table_name = 'another_delayed_jobs'
    end
  end
end

【参考】普通のActiveRecordモデルで規約以外のテーブルを使う場合

self.table_nameで値を変更する

例えばUserモデルの場合、Rails規約通りのusersテーブルから、foo_bar_usersテーブルに変更したい場合
下記のようにしてあげる

user.rb
class User < ApplicationRecord
  self.table_name = 'foo_bar_users'
end