在Rails 4应用程序中在站点范围内设置默认网址选项的最佳做法是什么?在开发/生产/ ...配置中为邮件设置它们很简单。
所以我只是添加了以下作为第一个选项:
config.action_mailer.default_url_options = Rails.application.routes.default_url_options = { host: 'myhost.com' }
这导致在某些情况下丢失主机,所以我从配置中删除了Rails.application.routes,然后跟着guide在应用程序控制器中定义了一个方法:
def default_url_options
Rails.application.config.action_mailer.default_url_options
end
然而,这不适用于未通过控制器路由的Rake任务,延迟作业等。所以我不得不将Rails.application.routes添加回配置。
现在,Rails.application.routes是在两个地方而不是一个地方指定的。
有没有办法避免这种情况?
答案 0 :(得分:0)
异步作业是一个很好的问题,您可能需要在您使用的库的初始化程序中执行类似以下操作。
您可以在application.rb配置中为单个位置指定邮件程序和控制器。
config.action_controller.default_url_options = { protocol:, host: , port: }
config.action_mailer.default_url_options = { protocol:, host: , port: }
在开始时将这些注入默认选项意味着每次请求(可能是链接生成器)时,它都会找到您提供的选项。
您很可能希望使用与测试套件对齐的值覆盖测试环境config/test.rb
,例如
{ protocol: "http://", host: "test" }
答案 1 :(得分:0)
我认为适用于控制台的功能可用于延迟作业。试试这个:
# in routes.rb
Rails.application.routes.draw do
default_url_options host:'myhost.com'
# in production.rb
config.action_mailer.default_url_options= {host:'myhost.com'}
请发表评论以报告这是否有效:)