Без delayed_job этот код работает нормально; если я включаю delayed_job, я получаю ошибку неинициализированной константы EmailNewsletter :: Gibbon
при каждой попытке рабочий делает.
Rails 3.0.7, Gibbon 0.1.5 (гем для работы с MailChimp), delayed_job 2.1.4.
Контроллер
def subscribe
email = params[:email]
EmailNewsletter.subscribe(email)
render(:update) do |page|
page << "...view update code..."
end
end
lib / email_newsletter.rb
module EmailNewsletter
def self.subscribe(email)
g = Gibbon::API.new('api_key_here', :id => 'list_id_here')
g.listSubscribe(:email_address => email)
end
end
С приведенным выше кодом, если я отправляю адрес электронной почты в / subscribe, все работает нормально.Я хочу включить delayed_job, чтобы мое приложение не работало медленно, если MailChimp слишком долго отвечает.
Контроллер
def subscribe
email = params[:email]
EmailNewsletter.delay.subscribe(email)
render(:update) do |page|
page << "...view update code..."
end
end
Похоже, задание отлично помещается в таблицу delayed_job. Данные обработчика
:
--- !ruby/struct:Delayed::PerformableMethod
object: !ruby/module EmailNewsletter
method_name: :subscribe
args:
- email@example.com
Секундой позже рабочий берет его и запускает, и я получаю сообщение об ошибке: неинициализированная константа EmailNewsletter :: Gibbon
.
application.rb
включает config.autoload_paths + =% W (# {Rails.root} / lib)
.
Что я делаю не так?
Edit
Для пояснения, строка, возникает ошибка
g = Gibbon :: API.new ('api_key_here',: id => 'list_id_here')
Я также пробовал
g = :: Gibbon :: API. new ('api_key_here',: id => 'list_id_here')