Как можно использовать delayed_job, чтобы заставить Rails 3.0 ActionMailer работать асинхронно? Обнаружение ArgumentErrors

Я пытаюсь отложить отправку уведомления по электронной почте пользователям после регистрации в моем приложении. Электронные письма отправляются с помощью ActionMailer , который я называю InitMailer .Я пытаюсь отложить выполнение заданий с помощью delayed_job https://github.com/collectiveidea/delayed_job . Для этого вы можете видеть, что я указываю handle_asynchronously после определения метода initial_email :

class InitMailer < ActionMailer::Base
  default :from => "info@blahblahblah.com"

  def initial_email(user)
    @user = user
    @url = "http://www.blahblahblah.com"
    mail(:to => user.email,
         :subject => "Welcome to my website!"
         ) 
  end

  handle_asynchronously :initial_email
end

Однако я обнаружил ошибку аргумента в моем файле журнала "delayed_job.log" :

Class#initial_email failed with ArgumentError: wrong number of arguments (1 for 0) - 5 
failed attempts

К вашему сведению, электронное письмо отправляется в контроллере с использованием строки:

@user = InitUser.new(params[:init_user])
InitMailer.delay.initial_email(@user)

Кроме того, когда я настроил свой код без задержки, электронные письма были отправлены без проблем (за исключением того факта, что это замедлило мое приложение, ожидающее серверов Gmail)

Где здесь возникают ошибки? Как я могу правильно отправить задержанное письмо?

10
задан skaffman 5 July 2011 в 18:51
поделиться