Принудительное отложенное задание для использования отдельного соединения с БД

Мое приложение настроено таким образом, что мы используем разные подключения к базе данных для каждого поддомена, используя разные среды. Отложенное задание делает то, что вы ожидаете (я думаю), и использует текущую среду этого запроса (и, следовательно, соединение с БД) при вставке задания в его таблицу delayed_jobs.

Проблема в том, что DJ не может обрабатывать задания из всех этих разных таблиц, поэтому я пытаюсь заставить DJ использовать только одну базу данных, специально настроенную для этого. Я пробовал это< /strong>, но это просто не сработает, и я понятия не имею, что делать дальше.

Любые указатели/предложения будут ОЧЕНЬ высоко оценены, на самом деле, на этом мой разум заканчивается.

Попытка кода:

Delayed::Job.class_eval do
  establish_connection ActiveRecord::Base.configurations["delayed_job"]
end

Подключение к БД осуществляется в before_filter в ApplicationController.


person Mike Campbell    schedule 14.12.2012    source источник
comment
Можете ли вы подробнее описать свое окружение? т. е. сколько веб-серверов, серверов отложенных заданий, как вы назначаете БД на каждом, и покажите код install_connection.   -  person aceofspades    schedule 14.12.2012
comment
1 веб-сервер, 1 приложение, 1 сервер отложенных заданий. Подключение к БД осуществляется в фильтре before_filter в контроллере приложения.   -  person Mike Campbell    schedule 15.12.2012
comment
возможный дубликат Как я могу заставить delayed_job использовать конкретное соединение с БД?   -  person Mike Campbell    schedule 17.12.2012


Ответы (1)


Код в ApplicationController для установления соединения для каждого домена будет выполняться только на вашем сервере приложений при каждом запросе.

Добавьте атрибут :domain к вашему классу Job и установите его при постановке задания в очередь. В Job#perform установите соединение с БД.

person aceofspades    schedule 15.12.2012
comment
Вы ответили на что-то, что не совсем то, о чем я спрашивал, но все же заслуживает голосования. Я сделал ошибку школьника, и код в моем вопросе действительно работает. Я просил вопрос закрыт. - person Mike Campbell; 17.12.2012