2017-05-02 3 views
2

ich eine ziemlich einfache Rails-Anwendung, die ich auf ein Upgrade von Rails gerade arbeite 4 bis Rails 5, aber ich bin etwas Seltsamkeit mit default_url_optionsRails 5 default_url_options Merkwürdigkeiten

In config/environments/test.rb bemerkte ich:

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

Meine Anwendung hat einen Namensraum namens api. In meinen Anfrage-Spezifikationen sehe ich folgendes:

[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" 

Was fehlt mir, dass diese URLs anders sind?

EDIT

Per this thread stelle ich

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

in config/environments/test.rb aber jetzt bekomme ich diese:

> 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" 

EDIT 2

Es ist vielleicht erwähnenswert, dass es sich um Anforderungsspezifikationen und nicht um Eigenschaftenspezifikationen handelt (keine Verwendung von Capybara).

Antwort

2

Dies sollte das Problem in der Steuerung/Anfrage Spezifikationen beheben:

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

Was, warum dies auftritt, gibt es einige more information available in this ongoing thread on Github.

+0

siehe die Bearbeitung, die ich zum ursprünglichen Beitrag gemacht habe. – Eugene

+0

@Eugene Sie mussten den Code, den Sie hatten, nicht entfernen. – coreyward

+0

@coreward sogar mit dem ursprünglichen Code zurück, das Verhalten ist das gleiche wie es ursprünglich war – Eugene