ruby-on-rails - Rails 5 default_url_options 怪事

标签 ruby-on-rails ruby

我有一个非常简单的 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/

相关文章:

javascript - 如何访问rails中渲染的json对象

ruby-on-rails - Gem 将图像裁剪为 rails 中的多种尺寸

ruby - 使用 Grit 创建标签

ruby - 难以访问 Sinatra 中的验证错误

ruby-on-rails - 在生产环境中运行 Watir 等慢速网络驱动程序

javascript - 如何将详细信息行限制为 10?

ruby-on-rails - 我应该如何在生产中管理我的 gem 的二进制依赖项?

ruby-on-rails - 选择具有多个预选值的标签 - 在数据库中手动插入的值

ruby - 我如何在不使用 ruby​​ 中的 sleep() 的情况下 rspec/test 一个 updated_at 字段?

Ruby:对数组元素进行赋值