У меня была такая же проблема, когда мои почтовые программы правильно доставляли электронную почту при выполнении из веб-процесса или в консоли Rails, но если они были поставлены в очередь для доставки в рабочем процессе, они вызывали исключение Errno :: ECONNREFUSED.
Я тоже использовал инициализатор для настройки конфигурации.Все в нем пахло так, будто настройки SMTP как-то не учитывались, но только при запуске рабочего процесса.
В конце концов я добавил это в почтовую программу:
m = mail(to: "herpderp@example.com", subject: "Example")
puts m.to_yaml
return m
Это показало, чтоэкземпляр почты имел внутри объект настроек smtp (или на него ссылались изнутри, и включал в to_yaml), и этот объект настроек smtp был без настроек smtp, которые я объявил в своем инициализаторе.Вот выдержка:
settings:
:address: localhost
:port: 25
:domain: localhost.localdomain
:user_name:
:password:
:authentication:
:enable_starttls_auto: true
:openssl_verify_mode:
:ssl:
:tls:
Очевидно, это было неправильно.Кроме того, при печати Rails.application.config.action_mailer.smtp_settings из того же объявления печатались правильные настройки .
Поэтому, чтобы сузить возможности, я, конечно, переместил свои объявления настроек обратно в разработку.rb и в следующий раз, когда эти настройки были напечатаны на stdout моего работника, они были правильными, и электронная почта доставлена, как и ожидалось.
Поэтому я не могу сказать, что полностью понимаю, как / когда обрабатываются конфигурации, установленные в инициализаторахпотому что у меня не так много видимости в этой глубине основных модулей Rails, но я могу сказать, что где-то там, из-за того, как почтовый экземпляр извлекает настройки smtp из глобальных настроек, есть разница между тем, как и когдаони объявлены в инициализаторе в сравнении с файлом среды.
Урок для меня.Не переходите слишком далеко от стандартных стандартов конфигурации Rails с классом инициализатора.Все работало как положено, как только я перенес конфигурацию обратно в development.rb.Возможно, кто-то еще может помочь объяснить, что происходит между rb-файлами среды и инициализаторами.