2015-10-14 34 views
4

我正在将应用程序升级到Rails 4.2,所以我们可以利用ActionMailer的deliver_later方法。一切都在开发中发挥作用。当我使用capistrano-sidekiq gem部署到我们的临时服务器时,电子邮件看起来并未交付。根据这个日志,看起来作业正在排队并正确执行。为什么不通过ActiveJob发送电子邮件?

服务器是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 protected] (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 

任何想法发生了什么或有什么我可以下一个解决?

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

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

编辑:发现额外config.action_mailer.raise_delivery_errors = falseconfig/environments/staging.rb这阻止了我看到我的错误。我现在可以看到邮件被拒绝:

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

编辑:还有一个资料片,呼吁同邮件作品deliver_now。拨打deliver_later会导致电子邮件被拒绝。这导致我认为应用程序的SMTP设置正在工作。拨打deliver_later时发生了一些情况,以防止发送电子邮件。

+0

确保你在你的Rails配置中有'config.action_mailer.raise_delivery_errors = true'。如果ActionMailer遇到错误,这将帮助您排除故障。 –

+0

谢谢。添加了该行。测试。没有这样的运气。相同的日志条目。 –

+0

当您使用'deliver_now'时,电子邮件是否成功发送?这将有助于缩小配置问题还是sidekiq问题。 –

回答

0

我最近在我们的一台服务器上遇到了这个问题。它的配置与另一台服务器完全相同,但电子邮件并未发送,尽管看起来像Resque正在成功处理它们。

原来是我们的监测工具God的问题。运行sudo service god restart本身并未正确重置工作人员。解决办法是停止所有sudo god stop工作人员,确认他们已停止ps aux | grep resque,然后使用sudo service god stop关闭神,并以sudo service god start开始。

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

0

我遇到了同样的问题。这固定它:

内部配置/部署。RB:

set :sidekiq_queue, "mailers" 

显然,ActiveJob将作业发送到“邮件程序”队列中,但如果没有在配置中指定的sidekiq宝石只创建默认和通知队列。

+0

我在config/deploy.rb中设置了':sidekiq_queue,[“default”,“mailers”]' –