gpt4 book ai didi

ruby-on-rails - Rails Mailer "Net::OpenTimeout: execution expired"仅生产服务器上的异常

转载 作者:行者123 更新时间:2023-12-03 07:58:07 29 4
gpt4 key购买 nike

我在 Ubuntu 12.04 TLS VPS 上使用 Ruby MRI 2.0.0 和 Rails 3.2.12,并尝试在我的应用程序中设置电子邮件通知。 几天前它工作正常,但现在不行了。 我的虚拟主机是 OVH。

我的 SMTP 设置:

config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true

ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:user_name => 'sender@gmail.com',
:password => 'secret',
:authentication => 'plain',
:enable_starttls_auto => true
}

使用 RAILS_ENV=production rails console :
class MyMailer < ActionMailer::Base
def test_email
sender = "sender@gmail.com"
receiver = "receiver@example.com"
mail from: sender, to: receiver, subject: "Hello!", body: "World!!"
end
end
=> nil

MyMailer.test_email.deliver

输出:
Net::OpenTimeout: execution expired
from ~/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:540:in `initialize'
from ~/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:540:in `open'
from ~/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:540:in `tcp_socket'
from ~/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:550:in `block in do_start'
from ~/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:549:in `do_start'
from ~/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:519:in `start'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/mail-2.4.4/lib/mail/network/delivery_methods/smtp.rb:144:in `deliver!'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/mail-2.4.4/lib/mail/message.rb:2034:in `do_delivery'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/mail-2.4.4/lib/mail/message.rb:229:in `block in deliver'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/actionmailer-3.2.12/lib/action_mailer/base.rb:415:in `block in deliver_mail'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/activesupport-3.2.12/lib/active_support/notifications.rb:123:in `block in instrument'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/activesupport-3.2.12/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/activesupport-3.2.12/lib/active_support/notifications.rb:123:in `instrument'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/actionmailer-3.2.12/lib/action_mailer/base.rb:413:in `deliver_mail'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/mail-2.4.4/lib/mail/message.rb:229:in `deliver'
from (irb):28
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/railties-3.2.12/lib/rails/commands/console.rb:47:in `start'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/railties-3.2.12/lib/rails/commands/console.rb:8:in `start'
from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/railties-3.2.12/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'2.0.0p0 :029 >

我尝试了以下方法:
  • exception_notification几天前,gem 已添加到设置中。我试图在 Gemfile 中评论它的行以及它的匹配配置,并运行 bundle install .重新启动服务器后,即使我删除并重新创建 gemset,问题仍然存在。
  • 在虚拟机上测试(与 VPS 完全相同的设置,包括 iptables 规则):作品
  • 禁用 iptables 规则:不起作用
  • 使用 openssl 从 VPS 手动连接到 Gmail:作品 (所以这不是防火墙问题 - 请参阅此处: Connecting to smtp.gmail.com via command line );
  • 在 Gmail 帐户选项中启用 IMAP(已禁用):不起作用
  • 使用其他 Gmail 帐户:不起作用
  • 用 Ruby 1.9.3 替换 Ruby 2.0.0
  • 升级到 Rails 3.2.13

  • 有人对如何解决这个问题有可能的线索吗?

    谢谢!

    最佳答案

    首先用Telnet做直连:

    telnet smtp-relay.sendinblue.com 587
    Trying 94.143.17.4...

    这是基本的连接故障排除,适用于任何提供商或端口。用您的实际主机名/端口替换 SendBlue 和 587 端口。

    如果您收到此错误:
    telnet: Unable to connect to remote host: Connection timed out

    那么,问题不在于 Rails。

    在上面的例子中,问题出在 端口号 . sendinblue 或 mandrill(我也相信 gmail)之类的服务不再支持 587 端口。 “2525”是新的“587” .

    如果您在 telnet 上超时,请检查:
  • 主机名 :人们通常使用“smtp.sendinblue.com”而不是“stmp-relay.sendinblue.com”、“smtp.mandrill.com”而不是“smtp.mandrillapp.com”等等。
  • 端口 : 587 已过时。主要供应商现在使用 2525 代替。少校 DigitalOcean 等云服务阻止与 587 的传出连接 以及。这就是为什么它可以在您的 PC 上运行,但不能在您的服务器上运行。我什至不会提到“25”端口,它比 587 更陈旧。此外,一些提供商使用特定的非默认端口或 imap。
  • ipv6 与 ipv4 : 检查主机名是否被转换为 IPv4。如果没有,请尝试禁用 IPv6(请参阅其他答案)。
  • 主机名解析 :在您知道正在发送电子邮件的机器上运行相同的 telnet 命令。检查翻译后的ip(“尝试xxx...”的xxx部分)是否相同。如果没有,请返回您的服务器并用此 ip 替换主机名。如果有效,请更改您的/etc/hosts 并强制主机名使用此 IP。
  • 关于ruby-on-rails - Rails Mailer "Net::OpenTimeout: execution expired"仅生产服务器上的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16040158/

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