【问题标题】:Rails 3 - Delayed_Job (collectiveidea), trying to Delay Mailers - Error: NoMethodError (undefined method `delay' for UserMailer:Class)Rails 3 - Delayed_Job (collectiveidea),试图延迟 Mailers - 错误:NoMethodError(未定义的方法 `delay' for UserMailer:Class)
【发布时间】:2011-05-24 01:16:03
【问题描述】:

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

我在观察者中有以下内容:

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 所需的后端表?

标签: ruby-on-rails ruby-on-rails-3 delayed-job


【解决方案1】:

还要检查您是否在安装包后重新启动了服务器。这也可能是个问题...

【讨论】:

    【解决方案2】:

    我在我们的 Rails 应用程序(2.3.8,但问题听起来一样)上看到了这样的问题。基本上,有三种方法可以延迟一个动作:

    1. MyClass.delay.foo(arg)
    2. handle_asynchronously :foo 放在类定义中 foo 的定义之后
    3. MyClass.send_later(:foo, arg)

    无论出于何种原因,#3 是唯一一种在我们所有的开发机器上都能始终如一地工作的形式。 #1 在我们的开发服务器(Ubuntu)上死了; #2 在我们设计师的 Mac 上。但是#3很好。

    希望有帮助!

    【讨论】:

    • [DEPRECATION] object.send_later(:method) 已弃用。使用object.delay.method,但它仍然不适合我
    • @Lucas 我只用 Rails 2.3.8 试过这个,所以你看到的可能是 Rails 3 的东西。或者您可以尝试不同的延迟作业分支 - 有一堆(我认为我们使用 CollectiveIdea)。或者它可能会被全面弃用——这将是一个可怕的消息,因为send_later 是唯一一个一直有效的!也许一个错误报告是为了......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 2017-07-24
    • 2011-12-02
    相关资源
    最近更新 更多