带有延迟工作的 NoMethodError (collectiveidea gem)

2024-04-01

更新:这个问题已经有一个补丁了:https://github.com/collectiveidea/delayed_job/commit/023444424166ba2ce011bfe2d47954e79edf6798 https://github.com/collectiveidea/delayed_job/commit/023444424166ba2ce011bfe2d47954e79edf6798

更新 2:对于在 Heroku 上遇到此问题的任何人,我发现降级到 Rake 0.8.7 并使用延迟作业版本 2.1.4 可以工作,而延迟作业 v3 则不行(尽管使用补丁后它可以在本地工作) 。这是在 Bamboo-mri-1.9.2 堆栈上。

我正在尝试在本地 Rails 3.1.0 应用程序上实现delayed_job。我运行了迁移并 安装了 gem 文件:

gem 'delayed_job'
gem 'delayed_job_active_record'

遵循 Collectiveidea github 上的文档(https://github.com/collectiveidea/delayed_job https://github.com/collectiveidea/delayed_job)。我正在从我的控制器发出延迟呼叫,如下所示:

EventMailer.delay.event_message_email(current_user, @event_message)

这会导致任务被添加到作业表中,但是当我运行 rake jobs:work 时,它会记录以下错误:

Class#event_message_email failed with NoMethodError: undefined method `event_message_email' for Class:Class - 6 failed attempts

我查看了 SO 上的其他延迟作业 NoMethod 错误问题,但没有一个解决此特定错误或提供解决方案。 Collectiveidea 页面提到这种没有传递方法调用的格式是对 Rails 3 邮件程序设置方式的黑客攻击,所以我想知道这个文档是否可能有些过时,以及是否有一种新的方法来调用邮件程序方法?

更新:同样毫不延迟地调用 mailer 方法也可以正常工作,并且我在默认的 Rails 服务器上运行它,因此在 Collectiveidea 常见问题解答中提到的 Thin 问题不适用。谢谢


在 Rails 3 中使用 Mailer.delay.send_method 似乎有问题(他们在文档中提到这是一个 hack)。我有相同的 NoMethodError 并通过使用文档中显示的创建作业的替代方法解决了它,即使用执行方法创建一个新的 Job 类,例如

class UserMailerJob < Struct.new(:text, :email)
  def perform
    UserMailer.your_mailer_method(text, email).deliver
  end
end

然后在我的控制器中创建作业:

Delayed::Job.enqueue UserMailerJob.new(@text, @email)

这样做比使用延迟稍微长一些,但它似乎可以正确创建作业并可靠地处理它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有延迟工作的 NoMethodError (collectiveidea gem) 的相关文章

随机推荐