#ruby-on-rails-3 #delayed-job #mandrill
#ruby-on-rails-3 #отложенное задание #мандрил
Вопрос:
У меня есть почтовая служба, где пользователи могут загружать xls-файл с электронными письмами и некоторыми другими пользовательскими данными, связанными с отправкой кампании по электронной почте.
У меня возникли некоторые проблемы с таймаутом, поскольку обработка занимает несколько секунд (поскольку я выполняю некоторую проверку и настройку для каждого отправляемого электронного письма, например: сохраняю записи в базе данных, проверяю, было ли отправлено электронное письмо за последние 30 дней, создаю персонализированный html-код для каждого электронного письма (для создания ссылок, содержащих адрес электронной почты в качестве параметра и т.д.).
После некоторых исследований перенос этого в отложенное задание показался разумным, как было предложено в этом приведении rails. Единственная проблема заключается в том, что у меня возникает ошибка, в которой говорится uninitialized constant Mandrill::API
, что, похоже, когда я запускаю задание, вызов require 'mandrill'
не работает.
Я создал задачу в своем файле модели. Что-то вроде этого
class Mailer < ActiveRecord::Base
attr_accessible :email, :lastname, :name
def self.send_mail(emails)
[...a lot of code here...]
require 'mandrill'
m = Mandrill::API.new ENV['MANDRILL_APIKEY']
message = {
:subject=> template.subject,
:from_name=> template.from_name,
:from_email=> from "@" email_domain,
:to=>mails,
:global_merge_vars=> [
{ :name => 'GREETING', :content => template.greeting},
{ :name => 'CONT1', :content => template.message},
{ :name => 'IMAGE', :content => image_url},
],
:html=>email_template,
:preserve_recipients => false,
:merge_vars => email_contents,
}
sending = m.messages.send message
end
end
я вызываю свой контроллер Mailer.send_mails(emails)
, и он работает просто отлично, но при вызове Mailer.delay.send_mails(emails)
я получаю сообщение об ошибке. Как я могу это исправить?
Я пробовал добавлять require 'mandrill'
в начале класса, до и после class Mailer < ActiveRecord::Base
, но, похоже, ничего не работает
Комментарии:
1. Давайте покончим с глупыми вопросами — вы перезапускали свой демон delayed_job после внесения этих изменений? Эта среда не перезагружается самостоятельно, как Rails в разработке, AFAIK.
2. вы были правы … Я уверен, что глупые вопросы решают 99% проблем в stackoverflow. Я просто перезапускал сервер, а не демон. Пожалуйста, добавьте свой комментарий в качестве ответа, чтобы я мог пометить его как правильный
Ответ №1:
Обязательно перезапустите демон delayed_job, чтобы зафиксировать любые изменения кода. Он не выполняет автоматическую перезагрузку, как это делает среда разработки Rails.