Rails:延迟工作 - >发送异步邮件时,不会从“字段”字段中取出

时间:2010-11-30 13:49:53

标签: ruby-on-rails delayed-job

我正在运行2.1.1,Rails 3,并且有一个heckuva时间让delayed_job宝石工作。如果我在邮件程序上删除handle_asynchronously,一切正常......但如果我把它重新插入,我得到:

nil的未定义方法`name':NilClass(其中'name'来自@ contact.name ...当handle_asynchronously被禁用时,它可以正常工作。)

如果我删除所有@contact模板信息,我会得到:

“发送邮件所需的发件人(Return-Path,Sender或From)”?

这是我做错了什么还是某种错误?下面的相关代码(my@email.here替换为合法的电子邮件地址)

class ContactMailer < ActionMailer::Base
  default :from => "my@email.here"  

  def contact_mail(contact)
    @contact = contact
    mail(:to => ENV['MANAGER_EMAIL'], :subject => 'Delayed Job Test', :from => 'my@email.here', :content_type => 'text/plain')
  end

  handle_asynchronously :contact_mail, :run_at => Proc.new { 2.seconds.from_now }
end

非常感谢任何建议。

3 个答案:

答案 0 :(得分:2)

尝试使用实际的电子邮件地址调用该方法:

def contact_mail(contact_email)
  mail(:to => ENV['MANAGER_EMAIL'], :subject => 'Delayed Job Test', :from => contact_email, :content_type => 'text/plain')
end

这是我唯一可以想到的,如果没有看到您的实际代码可能会有所帮助。你的错误说你在一个零对象上调用了名字,但我看不到你在哪里调用.name ...

答案 1 :(得分:0)

我遇到了同样的问题并通过删除此行解决了这个问题:

default :from => "my@email.here" 

但是我不知道为什么它会撞到这条线..

答案 2 :(得分:0)

Rails 3 Mailers

由于邮件如何在Rails 3中实现,我们不得不做一些工作来使delayed_job工作。

# without delayed_job
Notifier.signup(@user).deliver

# with delayed_job
Notifier.delay.signup(@user)

删除.deliver方法以使其正常工作。这不是理想的,但它是我们现在能做的最好的

https://github.com/collectiveidea/delayed_job#rails-3-mailers