gpt4 book ai didi

ruby-on-rails - 为什么不使用 ActiveJob 发送电子邮件?

转载 作者:行者123 更新时间:2023-12-04 07:39:19 27 4
gpt4 key购买 nike

我正在将应用程序升级到 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

我使用 ps aux | [sS]idekiq 检查了 sidekiq 是否正在运行并且有一个条目:
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 启动了 sidekiq在 appname/current并尝试再次发送电子邮件。这次发送了电子邮件,因此 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 中发生了一些事情调用以防止发送电子邮件。

最佳答案

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

原来是 God 的问题,我们的监控工具。运行 sudo service god restart本身没有正确重置 worker 。解决方案是用 sudo god stop 停止所有 worker ,验证它们是否已通过 ps aux | grep resque 停止,然后用 sudo service god stop 关闭神并从 sudo service god start 开始.

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

关于ruby-on-rails - 为什么不使用 ActiveJob 发送电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33131927/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com