Отложенное задание и Мандрил: неинициализированная константа Mandrill::API

#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.