为什么电子邮件不能与ActiveJob一起发送?

时间:2015-10-14 17:30:37

标签: ruby-on-rails capistrano sidekiq

我正在将应用升级到Rails 4.2,因此我们可以利用ActionMailer的deliver_later方法。一切都在发展中很好。当我使用capistrano-sidekiq gem部署到我们的登台服务器时,似乎没有发送电子邮件。根据此日志,作业将排队并正确执行。

服务器是Ubuntu 14.04,通过apt-get安装了redis。

[ActiveJob] Enqueued ActionMailer::DeliveryJob (Job ID: 51ddade2-4689-40fd-aeda-7e94f7260e43) to Sidekiq(mailers) with arguments: 
"ApplicationMailer", "admin_message", "deliver_now", "Broken Link", "Testing an email from staging."
[ActiveJob] [ActionMailer::DeliveryJob] [51ddade2-4689-40fd-aeda-7e94f7260e43] Performing ActionMailer::DeliveryJob from Sidekiq(mailers) 
with arguments: "ApplicationMailer", "admin_message", "deliver_now", "Broken Link", "Testing an email from staging."
[ActiveJob] [ActionMailer::DeliveryJob] [51ddade2-4689-40fd-aeda-7e94f7260e43]   Rendered application_mailer/admin_message.html.erb within  layouts/mailer (1.9ms)
[ActiveJob] [ActionMailer::DeliveryJob] [51ddade2-4689-40fd-aeda-7e94f7260e43]   Rendered layouts/mailer.html.erb (8.8ms)
[ActiveJob] [ActionMailer::DeliveryJob] [51ddade2-4689-40fd-aeda-7e94f7260e43]   Rendered application_mailer/admin_message.text.erb within layouts/mailer (0.8ms)
[ActiveJob] [ActionMailer::DeliveryJob] [51ddade2-4689-40fd-aeda-7e94f7260e43]   Rendered layouts/mailer.text.erb (3.6ms)
[ActiveJob] [ActionMailer::DeliveryJob] [51ddade2-4689-40fd-aeda-7e94f7260e43]
Sent mail to email-testing@loamstudios.com (216.8ms)
[ActiveJob] [ActionMailer::DeliveryJob] [51ddade2-4689-40fd-aeda-7e94f7260e43] Performed ActionMailer::DeliveryJob from Sidekiq(mailers) in 796.8ms

我检查了sidekiq是否正在使用ps aux | [sS]idekiq运行,并且有一个条目:

deploy   15104  0.4  7.4 972692 152452 ?       Sl   10:07   0:03 sidekiq 3.5.1 sustainabilityassessment_staging [0 of 25 busy]

我还确保邮件队列在我的set :sidekiq_queue, ["default", "mailers"]中存在deploy.rb

我的邮件方法:

def admin_message(subject, message)
    @message = message
    mail(to: "<address>", subject: subject)
  end

知道发生了什么或接下来要解决的问题是什么?

编辑: 做了一些挖掘。我使用RAILS_ENV=staging bundle exec sidekiq -q mailers -q default中的appname/current启动了sidekiq,并尝试再次发送电子邮件。这次发送的电子邮件,所以capistrano-sidekiq gem启动sidekiq的方式似乎有问题。

编辑: 设置sidekiq的监控应用程序,看看我是否可以学习任何新东西。看来工作正在处理中没有问题。仍然没有收到电子邮件......

修改:在config.action_mailer.raise_delivery_errors = false中发现了额外的config/environments/staging.rb,阻止我查看错误。我现在可以看到电子邮件被拒绝了:

Net::SMTPServerBusy: 454 4.7.1 <email address>: Relay access denied

编辑:在同一邮件程序中调用deliver_now的另一条信息。调用deliver_later会导致电子邮件被拒绝。这使我认为应用程序的SMTP设置正常。 <{1}}通话中发生了一些事情,以防止发送电子邮件。

2 个答案:

答案 0 :(得分:0)

我最近在我们的一台服务器上遇到了这个问题。它的配置方式与另一台服务器完全相同,但电子邮件没有被发送,即使它看起来像Resque已成功处理它们。

事实证明,我们的监控工具God存在问题。单独运行sudo service god restart并未正确重置工作人员。解决方案是使用sudo god stop停止所有工作人员,使用ps aux | grep resque验证他们是否已停止,然后使用sudo service god stop关闭上帝,并使用sudo service god start启动。

如果您正在使用某种工具来监控,启动和停止Sidekiq,我会调查并确保工作人员已正确停止并重新启动。

答案 1 :(得分:0)

我遇到了同样的问题。这修好了它:

在config / deploy.rb中:

set :sidekiq_queue, "mailers"

显然,ActiveJob将作业发送到“邮件程序”队列,但是如果未在配置中指定,则sidekiq gem仅创建默认队列和通知队列。