设置default_url_options以使用action_mailer.default_url_options。
在每个环境文件中(例如:development。rb、生产。Rb等),你可以指定default_url_options用于action_mailer:
config.action_mailer.default_url_options = { host: 'lvh.me', port: '3000' }
然而,这些都没有设置MyApp:Application.default_url_options:
$ MyApp::Application.config.action_mailer.default_url_options
#=> {:host=>"lvh.me", :port=>"3000"}
$ MyApp::Application.default_url_options
#=> {}
这就是为什么你在ActionMailer之外的任何地方都会得到这个错误。
您可以设置应用程序的default_url_options,以使用您在适当的环境文件中为action_mailer定义的选项(development。rb、生产。rb,等等)。
为了尽可能保持DRY,请在配置/环境中执行此操作。Rb文件,所以你只需要这样做一次:
# Initialize the rails application
MyApp::Application.initialize!
# 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
现在当你启动你的应用程序,你的整个应用程序的default_url_options将匹配你的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"}
感谢@pduersteler引导我走上这条路。