Как я могу заставить delayed_job использовать конкретное соединение БД? - PullRequest
8 голосов
/ 25 июня 2011

У меня есть приложения на Rails 3, которые используют разные базы данных в зависимости от субдомена. Я делаю это с помощью «create_connection» в ApplicationController.

Теперь я пытаюсь использовать гем delayed_job для выполнения некоторой фоновой обработки, однако он использует соединение с базой данных, которое активно в данный момент. Он подключается к базе данных поддоменов.

Я бы хотел заставить его использовать "общую" базу данных. Я сделал это для некоторых моделей, вызывающих "create_connection" в этой модели:

class Customer < ActiveRecord::Base
  establish_connection ActiveRecord::Base.configurations["#{Rails.env}"]
  ...
end

Есть идеи, как мне это сделать?

1 Ответ

17 голосов
/ 12 августа 2011

Вот что вам нужно знать. Когда вы включаете гем DelayedJob в свое приложение, вы создаете миграцию для него, чтобы создать таблицу, в которой хранятся задания, но вы не создаете модель. Это потому, что в DelayedJob уже есть модель, включенная в гем (т.е. Delayed::Job). То, что вам нужно сделать, это слегка исправить эту модель, как вы это сделали со своими моделями. Вы можете сделать это в инициализаторе.

Возможно, у вас уже есть инициализатор для настройки DelayedJob, если это возможно, вы можете сделать это там, если нет, вам нужно его создать. Итак, создайте ваш инициализатор (в config/initializers), если у вас его нет, мы назовем его delayed_job_config.rb, теперь добавим к нему следующее:

Delayed::Job.class_eval do
  establish_connection ActiveRecord::Base.configurations["#{Rails.env}"]
end

Мы сделали с моделью DelayedJob то же самое, что вы сделали с вашими собственными моделями. Теперь DelayedJob будет использовать это соединение для размещения заданий в БД.

...