我有一个非常简单的 Rails 应用程序,我正在努力从 Rails 4 升级到 Rails 5,但我注意到 default_url_options
在 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"
我错过了什么导致这些 URL 不同?
编辑
根据 this thread我设置了
config.action_controller.default_url_options = {
host: ENV['HTTP_HOST'] || 'localhost'
}
在 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"
编辑 2
可能值得注意的是,这些是请求规范而不是功能规范(不使用 capybara )。
最佳答案
这应该可以解决 Controller /请求规范中的问题:
config.action_controller.default_url_options = {
host: ENV['HTTP_HOST'] || 'localhost'
}
至于为什么会这样,有一些 more information available in this ongoing thread on Github .
关于ruby-on-rails - Rails 5 default_url_options 怪事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43745669/