【发布时间】:2012-01-25 23:54:03
【问题描述】:
更新:有一个针对这个问题的补丁: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 应用程序上实现延迟作业。我运行了迁移和 安装 gem 文件:
gem 'delayed_job'
gem 'delayed_job_active_record'
遵循collectiveidea github (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 错误问题,但没有一个解决此特定错误或提供解决方案。集体想法页面提到,这种没有传递方法调用的格式是对 Rails 3 邮件程序设置方式的一种破解,所以我想知道这个文档是否可能有些过时,以及是否有一种新的方法来调用邮件程序方法?
更新:在没有延迟的情况下调用 mailer 方法也可以正常工作,并且我在默认的 rails 服务器上运行它,因此集体想法常见问题解答中提到的 Thin 问题不适用。谢谢
【问题讨论】:
-
您上次重新启动
rake jobs:work任务是什么时候?每次更改代码后都需要重新启动。 -
EventMailer.event_message_email(current_user, @event_message).delay.deliver 工作吗?
-
@iWasRobbed:是的,我试过了
-
@Unixmonkey 不,这不起作用,实际上它给出了一个有用的错误,指出应该在方法调用之前放置延迟