Rails 3 - Delayed_Job (collectiveidea),尝试延迟邮件发送 - 错误:NoMethodError(UserMailer:Class没有定义'delay'方法)

6

我在这里使用了 delayed_job gem: https://github.com/collectiveidea/delayed_job

我在观察器(observer)中有以下内容:

UserMailer.delay.msg_notification(record) 

在 user_mailer.rb 文件中。
class UserMailer < ActionMailer::Base 
... 
def msg_notification(record) 
    mail( 
          :to => "#{record.user.email}", 
          :subject => "Notification" 
          ) 
  end 
.. 
end 

但是会出现以下错误:
 NoMethodError (undefined method `delay' for UserMailer:Class): 

有什么想法吗?谢谢。

你是否仔细检查过 gem 文件,确保 gem 已经在其中,并且已经运行了 bundle install 命令。此外,你是否已经按照文档中所述创建了后端表格以满足 gem 的要求? - Austin Lin
2个回答

4
我在我们的Rails应用程序(2.3.8,但问题听起来一样)中看到了这样的一个问题。基本上,有三种方法可以延迟操作:
  1. MyClass.delay.foo(arg)
  2. 在定义foo后,在类定义中放置handle_asynchronously :foo
  3. MyClass.send_later(:foo, arg)
由于某种原因,第三种方式是在我们所有的开发机器上都能正常工作的唯一形式。第一种在我们的开发服务器(Ubuntu)上失败了;第二种在我们设计师的Mac上失败了。但第三种没问题。
希望这能帮到你!

[不推荐使用] object.send_later(:method)已被弃用。请使用object.delay.method,但对我来说仍然无效。 - Lucas Renan
@Lucas 我只在Rails 2.3.8上尝试过这个,所以你看到的可能是Rails 3的问题。或者你可以尝试不同的delayed_job分支 - 有很多(我们使用CollectiveIdea的)。或者它可能已经被全面弃用了 - 这将是可怕的消息,因为send_later是唯一一直工作的!也许需要提交一个错误报告... - Xavier Holt

2

还要检查一下,是否在bundle install之后重新启动了服务器。这也可能是一个问题...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接