gpt4 book ai didi

ruby-on-rails - 带有延迟作业的 NoMethodError (collectiveidea gem)

转载 作者:行者123 更新时间:2023-12-04 02:08:16 25 4
gpt4 key购买 nike

更新:这个问题有一个补丁: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 应用程序上实现 delay_job。我运行了迁移和
安装了gem文件:

gem 'delayed_job'
gem 'delayed_job_active_record'

按照collectiveidea github ( https://github.com/collectiveidea/delayed_job ) 上的文档进行操作。我正在从我的 Controller 进行延迟调用,如下所示:
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 的其他 delay_job NoMethod 错误问题,但没有解决此特定错误或提供解决方案。 collectidea 页面提到这种没有传递方法调用的格式是对 Rails 3 邮件程序设置方式的一种黑客攻击,所以我想知道这个文档是否可能已经过时了,以及是否有一种新的方法来调用邮件程序方法?

更新:也立即调用 mailer 方法工作正常,并且我在默认的 rails 服务器上运行它,因此集体想法 faq 中提到的 Thin 问题不适用。谢谢

最佳答案

我通过切换到 delay_job (DJ) 版本 2.1.2 解决了这个问题。

我在用:
房车
ruby 1.8.7 (2010-01-10 补丁级别 249)
rails 3.0.9

gem 文件:
gem “delayed_job”,“2.1.2”

在此之前,我尝试使用最新版本的 delay_job:
gem "delayed_job", :git => 'git://github.com/collectiveidea/delayed_job.git'
对我来说是 v3.0.0.pre

但:
rails 生成 delay_job
没有生成迁移文件。我手动创建的。然后在'rake db:migrate' 之后,我得到了用于存储delayed_job 队列的表。然后,当我认为一切都必须正确工作时,我遇到了同样的错误。

当我试图找到这个错误的根源时,在“delayed_jobs”表中,我发现delayed_job的任务被错误地保存了。以下是“delayed_jobs”表中“handler”字段的片段:

--- !ruby/object:Delayed::PerformableMailer 
object: !ruby/class Notifier

据我所知,delayed_job 通过 Struct 类获取所有任务,因此该任务应该使用 '!ruby/struct' header 来保存,而不是 '!ruby/object'
这是正确保存的任务的片段:
--- !ruby/struct:Delayed::PerformableMailer 
object: !ruby/class Notifier

为了检查这一点,我在控制台中停止了 delaed_job 进程。然后我调用了一些方法将 DJ 的任务放到 DB 中:
Notifier.delay.some_email(current_user, @event_message)

然后我在 'handler' 字段中用 '!ruby/struct' 手动替换了 '!ruby/object'。
然后我开始 DJ 'rake jobs:work',它告诉我邮件已成功发送。

但:
- 这个任务没有从 DJ 的表中删除
- 邮件不会到达收件人

所以我决定这是新版本delayed_job中的一个错误。我切换到 DJ '2.1.2',它对我有用。

P.S.:对不起我的英语:)

关于ruby-on-rails - 带有延迟作业的 NoMethodError (collectiveidea gem),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8602203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com