Net::OpenTimeout(执行过期)Sidekiq 异常

Net::OpenTimeout (execution expired) exception on Sidekiq

我正在使用 sidekiq 对我的 Rails 应用程序将发送的电子邮件进行排队。发送电子邮件在开发中有效,但在生产中 sidekiq 会出现网络超时错误。怎么回事?

这是我在 production.rb

中的配置
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  address:              'smtp.gmail.com',
  port:                 578,
  domain:               ENV["PPRODUCTION_DOMAIN"],
  user_name:            ENV["GMAIL_USERNAME"],
  password:             ENV["GMAIL_PASSWORD"],
  authentication:       :plain,
  enable_starttls_auto: true
}

config.active_job.queue_adapter = :sidekiq

我试过以下方法:

  1. 禁用 IPv6 并将 IPv4 设置为首选
  2. 使用非标准端口 (2525) 而不是 587
  3. 尝试通过 telnet smtp.gmail.com 587 连接。我收到以下错误:telnet: Unable to connect to remote host: Network is unreachable。可能值得注意的是,我在代理后面运行 - 在这种情况下是否应该有额外的设置?
  4. sudo ufw allow 587

我在 Ubuntu 14.04 服务器上并使用 unicorn 和 nginx 设置了我的应用程序。

我已经在这里工作好几天了。 :( 任何帮助将不胜感激!

更新:

我还尝试了以下方法:

  1. 删除 sidekiq 以改为使用 Rails' 邮件程序发送电子邮件。相同的结果。
  2. 通过 telnet smtp.gmail.com 465 连接。这个有效,所以我尝试将生产端口设置为 465,但我仍然遇到相同的错误。
  3. 删除域,使用我们的生产域,并使用 localhost:3000。没有任何反应。

根据 Rails guide's Action 邮件基础知识,您提供的端口号不正确。因为它是 587 而不是 578。

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  address:              'smtp.gmail.com',
  port:                 587,
  domain:               'example.com',
  user_name:            '<username>',
  password:             '<password>',
  authentication:       'plain',
  enable_starttls_auto: true  }

希望对您有所帮助!!

通过将端口更改为 456 以某种方式修复了它。

我更改了端口,因为出于某种原因,telnet smtp.gmail.com 587 不起作用,但 telnet smtp.gmail.com 465 起作用。 587可能被网络屏蔽了。

此外,我不确定以下更改是否也有帮助,但我还将身份验证更改为 :login 而不是 :plain 并添加了 ssl: true。希望这对遇到同样问题的人有所帮助。