Rails default_url_options用于rake,延迟作业等

时间:2015-03-19 14:42:20

标签: ruby-on-rails ruby-on-rails-4 delayed-job

在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是在两个地方而不是一个地方指定的。

有没有办法避免这种情况?

2 个答案:

答案 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'}

请发表评论以报告这是否有效:)