Rails 5 default_url_options奇怪

时间:2017-05-02 19:21:56

标签: ruby-on-rails ruby

我有一个非常简单的rails应用程序,我正在从Rails 4升级到Rails 5,但我注意到config/environments/test.rb

的一些奇怪之处

Rails.application.routes.default_url_options[:host]= ENV["HTTP_HOST"] || "localhost" Rails.application.routes.default_url_options[:port]= ENV["PORT"] || 3000 我有:

api

我的应用程序有一个名为[1] pry> api_v3_sample_url => "http://www.example.com:3000/api/v3/sample" [2] pry> Rails.application.routes.url_helpers.api_v3_sample_url => "http://localhost:3000/api/v3/sample" 的命名空间。在我的请求规范中,我看到了:

config.action_controller.default_url_options = {
  host: ENV['HTTP_HOST'] || 'localhost'
}

我错过了什么导致这些网址不同?

修改

this thread我设置了

config/environments/test.rb

> Rails.application.routes.url_helpers.api_v3_sample_url ArgumentError: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true > api_v3_sample_url => "http://www.example.com/api/v3/sample" 中,但现在我明白了:

{{1}}

编辑2

可能值得注意的是,这些是请求规格而非功能规格(不使用水豚)。

1 个答案:

答案 0 :(得分:3)

这应解决控制器/请求规范中的问题:

config.action_controller.default_url_options = {
  host: ENV['HTTP_HOST'] || 'localhost'
}

至于为什么会这样,有一些more information available in this ongoing thread on Github