Унаследуйте default_url_options
вашего приложения от ActionMailer
.
По умолчанию значение default_url_options
, которое вы установили для config.action_mailer
в файлах среды (development.rb
, production.rb
и т. Д.)не используйте в качестве default_url_options
вашего Application
в целом.
$ MyApp::Application.config.action_mailer.default_url_options
#=> {:host=>"lvh.me", :port=>"3000"}
$ MyApp::Application.default_url_options
#=> {}
Итак, когда вы пытаетесь использовать все, что требует хоста и порта (например, url) вне почтовой программы,он не знает, что делать.
Вы можете решить эту проблему путем жесткого кодирования хоста и порта в нескольких местах для одной и той же среды, но вы не захотите этого делать, если ваш ActionMailer
на самом деле использует другой хост и порт, чем остальные ваши Application
.
Чтобы решить эту проблему (и сохранить все как можно более СУХОЕ), вы можете автоматически использовать config.action_mailer.default_url_options
как целоеApplication
default_url_options
.
Просто добавьте следующую строку в файл config/environment.rb
(изменив MyApp
на имя вашего приложения):
# Set the default host and port to be the same as Action Mailer.
MyApp::Application.default_url_options = MyApp::Application.config.action_mailer.default_url_options
Это исправит вашпроблема и автоматически установите Application
default_url_options
на то же, что и config.action_mailer.default_url_options
:
$ MyApp::Application.config.action_mailer.default_url_options
#=> {:host=>"lvh.me", :port=>"3000"}
$ MyApp::Application.default_url_options
#=> {:host=>"lvh.me", :port=>"3000"}