it-swarm.com.de

Wie stelle ich Standardhost für URL-Helfer in Schienen ein?

Ich würde so etwas gerne machen

config.default_Host = 'www.subdomain.example.com'

in einigen meiner Konfigurationsdateien, so dass object_url-Helfer (ActionView::Helpers::UrlHelper) Links erzeugen, die mit http://www.subdomain.example.com beginnen

Ich habe versucht, die Dokumente zu durchsuchen, fand aber nichts außer ActionMailer docs und http://api.rubyonrails.org/classes/Rails/Configuration.html , was für mich nicht nützlich ist, da ich es nicht weiß in welchen pat schauen. Gibt es einen Ort, der die gesamte Struktur von Rails :: Initializer.config beschreibt?

59
gorn

asset_Host funktioniert nicht für URLs

Sie müssen default_url_options in Ihrer ApplicationController überschreiben (zumindest in Rails 3).

http://edgeguides.rubyonrails.org/action_controller_overview.html#default-url-options

class ApplicationController < ActionController::Base
  def default_url_options
    if Rails.env.production?
      {:Host => "myproduction.com"}
    else  
      {}
    end
  end
end
52
Wilhelm

Definieren Sie den Standardhost in Ihrer Umgebungskonfiguration:

# config/environments/staging.rb
MyApp::Application.configure do
  # ...
  Rails.application.routes.default_url_options[:Host] = 'preview.mydomain.com'
  # ...
end

Dann können Sie an beliebiger Stelle in Ihrer App eine URL erstellen:

Rails.application.routes.url_helpers.widgets_url()

Oder fügen Sie die URL-Helfer in Ihre Klasse ein:

class MyLib
  include Rails.application.routes.url_helpers

  def make_a_url
    widgets_url
  end
end

Wenn Sie den Standardhost nicht definieren, müssen Sie ihn als Option übergeben:

widgets_url Host: (Rails.env.staging? ? 'preview.mydomain.com' : 'www.mydomain.com')

Es ist auch nützlich, Dinge wie das Protokoll anzugeben:

widgets_url protocol: 'https'
43
Andrew

Eine andere Möglichkeit ist es so einzustellen

# config/production.rb
config.action_controller.default_url_options = { Host: 'myproduction.com' }
28
goma

Sie können einfach :Host oder/und :only_path-Parameter für jeden url_helper ..__ einstellen. yours_url(params, :Host => "http://example.com", :only_path => Rails.env.test?) .__ Auf diese Weise setzen Sie keine globalen default_url_options in Ihren Umgebungen, es sei denn, Sie möchten dies.

2
NStojanovic

Soweit ich weiß, verwenden die *_url-Helfer den konfigurierten Hostnamen des Servers. Wenn meine Apache-Installation beispielsweise Anforderungen für diese Rails-App unter http://www.myapp.com/ akzeptiert, verwendet Rails diese Adresse. Deshalb verweisen die *_url-Methoden in einer Entwicklungsumgebung standardmäßig auf http://localhost:3000.

Der in der vorherigen Antwort vorgeschlagene Asset-Host wirkt sich nur auf die Helfer image_tag, stylesheet_link_tag und javascript_link_tag aus.

0
Robert Speicher