我正在将应用升级到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}}通话中发生了一些事情,以防止发送电子邮件。
答案 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仅创建默认队列和通知队列。