Edited at

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

More than 1 year has passed since last update.

非同期処理を実現する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