Ruby on rails Rails 3/delayed_作业-通缉:延迟邮件的基本示例

Ruby on rails Rails 3/delayed_作业-通缉:延迟邮件的基本示例,ruby-on-rails,delayed-job,Ruby On Rails,Delayed Job,我一直在想如何使用rails 3的delayed_作业发送延迟邮件。我已经尝试了几乎所有我能想到的可行的可能性组合-我可以让邮件在后台运行,我只是不能让它延迟发送到未来的时间。db中的delayed_jobs表清除任务,日志显示为'sent',delayed_job任务处理器拾取任务并显示sent With failure…但邮件为: 立即发送,或 根本就没有到 如果我将来尝试发送 如果有人能提供一个rails 3延迟工作的简单例子,在将来发送邮件,我将非常感激。我肯定洛萨人会这么做,所以我

我一直在想如何使用rails 3的delayed_作业发送延迟邮件。我已经尝试了几乎所有我能想到的可行的可能性组合-我可以让邮件在后台运行,我只是不能让它延迟发送到未来的时间。db中的delayed_jobs表清除任务,日志显示为'sent',delayed_job任务处理器拾取任务并显示sent With failure…但邮件为:

  • 立即发送,或
  • 根本就没有到
如果我将来尝试发送

如果有人能提供一个rails 3延迟工作的简单例子,在将来发送邮件,我将非常感激。我肯定洛萨人会这么做,所以我怀疑我遗漏了一些明显的东西。下面是我尝试过的无数组合之一:

延迟工作:2.1.2 轨道:3.0.3 actionmailer:3.0.3

控制器:

class TestmailerController < ApplicationController
  def index
    Testmailer.delay.test_mail
  end

end
作业命令:

rake jobs:work

使用
.delay
方法和设置
异步处理:测试邮件是多余的。尝试从代码中删除
.delay
方法。简单使用

Testmailer.test_mail   # without .deliver due to a delayed_job issue

但是,我对您的配置进行了一些测试,当使用sqlite时,
run_at
被忽略(不知道为什么),但是当使用mysql2时,一切都很好。

我同意andrea的观点-我遇到了这个确切的问题,在将本地开发数据库从sqlite切换到mysql之后,我可以像这样运行代码

Emailer.delay({:run_at => 5.minutes.from_now}).welcome(@user)

它会在5分钟后发送电子邮件。请注意,您可能需要比5分钟更大的延迟(在时区异常的情况下)才能确保它正常工作。

我在Rails 3和mongoid中发现,异步删除句柄可以让它正常工作。我遇到了各种各样的问题,而且似乎delayed_job无法识别我的Emailer类中的任何对象。异步删除句柄\u修复了它

你知道如何做到这一点没有延迟的方法。我想使用句柄\u async。。。方法。我喜欢使一个方法在所有被调用的地方都延迟,而不是改变所有调用方。
Testmailer.test_mail   # without .deliver due to a delayed_job issue
Emailer.delay({:run_at => 5.minutes.from_now}).welcome(@user)