Rails 5.2和Sidekiq 5:Errno :: EADDRNOTAVAIL:无法分配请求的地址-“ localhost”端口25的connect(2)

时间:2019-05-20 11:56:57

标签: ruby-on-rails actionmailer sidekiq ruby-on-rails-5.2

我正在尝试使用Sidekiq和h3发送电子邮件。

在我的deliver_later中,我有:

config/sidekiq.yml

在我的工人中,我尝试使用以下方法: :verbose: true :concurrency: 25 :queues: - [mailers, 7] - [critical, 6] - [default, 5] - [low, 4]

我在Sidekiq管理面板中看到我的邮件工作被卡在“重试”中,并出现以下错误:

Buyer::OffersMailer.instant_for_published_offer(info_to_deliver).deliver_later

我的应用程序可以发送Errno::EADDRNOTAVAIL: Cannot assign requested address - connect(2) for "localhost" port 25 电子邮件,我相信这会拒绝SMPTP可能有问题的假设。任何想法,有什么问题吗?

更新 此外,电子邮件未在生产环境中交付,我的配置如下所示:

deliver_now

2 个答案:

答案 0 :(得分:0)

由于使用#deliver_now方法正确发送了电子邮件,因此这意味着您的Mailer配置很好。现在,除了此以外,您还应该在application.rb配置文件中添加它:

config.active_job.queue_adapter = :sidekiq

,在config\initializers\sidekiq.rb中,需要配置Redis URL:

Sidekiq.configure_server do |config|
  config.redis = { url: (ENV["REDIS_URL"] || 'redis://localhost:6379/0') }
end

Sidekiq.configure_client do |config|
  config.redis = { url: (ENV["REDIS_URL"] || 'redis://localhost:6379/0') }
end

答案 1 :(得分:0)

生产中的错误是由于Procfile中的环境设置引起的。在我看来,Sidekiq docs截止RAILS_ENV=production

所以我的工作procfile看起来像这样:

main_worker: bundle exec sidekiq RAILS_ENV=production

如果您使用的是HerokuDokku,请不要忘记扩展您的工作人员。