Rails 3/delayed_job - 希望: 延迟邮件的基本示例

5
我一直在尝试使用rails 3和delayed_job发送延迟邮件。我已经尝试了所有可行的可能性组合 - 我可以让邮件在后台运行,但我无法将其延迟发送到未来的某个时间。数据库中的延迟任务表被清除,日志显示“已发送”,延迟任务处理器接收并成功发送任务……但是邮件要么立即发送,要么根本不会到达,如果我尝试在未来发送邮件。
如果有人能提供一个简单的Rails 3 Delayed Job示例,用于延迟将邮件发送到未来的时间,那就太好了。我相信许多人都这样做,所以我认为我可能漏掉了一些明显的东西。以下是我尝试过的其中一种组合:
delayed_job:2.1.2 rails:3.0.3 actionmailer:3.0.3
控制器:
class TestmailerController < ApplicationController
  def index
    Testmailer.delay.test_mail
  end

end

邮件发送器:

class Testmailer < ActionMailer::Base
  def test_mail
    mail(:to => '(myemailaddress@removedforprivacy.com', :from => '(removedforprivacy)@gmail.com', :subject => 'Testing Delayed Job', :content_type => 'text/plain').deliver
  end
  handle_asynchronously :test_mail, :run_at => Proc.new { 2.minutes.from_now }


end

config/environments/development.rb的相关邮件部分:

  # Don't care if the mailer can't send
  config.action_mailer.raise_delivery_errors = true

  # Print deprecation notices to the Rails logger
  config.active_support.deprecation = :log

  config.action_mailer.default_url_options = { :host => 'localhost:3000' }

  ActionMailer::Base.smtp_settings = {
    :address => "smtp.gmail.com",
    :port => 587,
    :domain => "gmail.com",
    :user_name => "(removedforprivacy)",
    :password => "(removedforprivacy)",
    :authentication => "plain",
    :enable_starttls_auto => true
  }

工作命令:

rake jobs:work
3个回答

13

我同意andrea的看法——我也遇到了这个问题,但在将我的本地开发数据库从sqlite切换到mysql后,我可以运行以下代码:

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

它会在5分钟后发送邮件。请注意,为确保其正常工作,您可能需要比五分钟更长的延迟(以防时区问题)。


你知道如何在不使用delay方法的情况下完成这个任务吗?我想使用handle_async...方法。我喜欢能够使所有调用的地方都延迟执行一个方法,而不是更改所有的调用者。 - baash05

1

同时使用.delay方法和设置handle_asynchronously :test_mail是多余的。尝试从您的代码中删除.delay方法,只需使用

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

不过,我测试了一下您的配置,使用 sqlite 时,run_at 被简单地忽略了(不知道为什么),但是使用 mysql2 时一切正常。


1

我在Rails 3中使用mongoid时发现,删除handle_asynchronously行可以使其正常工作。我遇到了各种问题,似乎delayed_job无法识别我的Emailer类中的任何对象。删除handle_asynchronously解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接