Delayed_job не отправляет письма Rails 3 - PullRequest
3 голосов
/ 22 декабря 2011

Примечание: использование Rails 3.1 и текущего гема delayed_job.

У меня есть модель User, которая вызывает after_create :mail_confirmation.

Метод mail_confirmation выглядит следующим образом согласно инструкциям delayed_job:

def mail_confirmation
    UserMailer.delay.registration_confirmation(self)
end

UserMailer is:

class UserMailer < ActionMailer::Base
  default from: "test@mysite.com"

  def registration_confirmation(user)
    @user = user
    mail(:to => "#{user.full_name} <#{user.email}>", :subject => "Test registration email")
  end
end

Задание ставится в очередь, и вывод rake jobs:work создает впечатление, что оно успешно выполнено:

[Worker(host:mymac.local pid:73694)] Starting job worker
[Worker(host:mymac.local pid:73694)] Class#registration_confirmation completed after 1.3659
[Worker(host:mymac.local pid:73694)] 1 jobs processed at 0.7288 j/s, 0 failed ...

Нет ошибки, кромеэлектронная почта никогда не отправляется.Это работает нормально, если я удаляю delayed из вызова метода в модели User и работаю со стандартным методом deliver:

def mail_confirmation
    UserMailer.registration_confirmation(self).deliver
end

Как я могу узнать, что происходит, когда работа выполняетсяобработанный?Любая идея, как это исправить?


Обновление Похоже, это связано с этим:

NoMethodError с delayed_job (colleideidea gem)

Ответы [ 2 ]

1 голос
/ 25 января 2012

Да, у меня была такая же проблема.@ Глина верна, на данный момент есть проблема: https://github.com/collectiveidea/delayed_job/issues/323

Я решил эту проблему, вернувшись к предыдущей версии delayed_job.

gem 'delayed_job', '2.1.2'
0 голосов
/ 11 октября 2013

У меня тут такие же проблемы. Я обнаружил, что по какой-то причине метод задержки, вызываемый в классах Mailer, обрабатывается методом Delayed::MessageSending#delay вместо Delayed::DelayMail#delay, который создает правильное исполнение (то есть PerformableMailer вместо PerformableMethod). Это не приводит к сбою задания, потому что PerformableMethod просто вызывает метод без доставки.

Взгляните на:

  • delayted_job / Библиотека / замедленная / message_sending.rb
  • delayted_job / Библиотека / замедленная / performable_mailer.rb
...