2013-05-09 8 views
7

In meinem production.rb ich meine asset_host zu Cloudfront gesetzt wie so:Gibt es eine Möglichkeit Satz config.action_controller.asset_host setzen in der Entwicklung

config.action_controller.asset_host = 'http://xxxxxxxx.cloudfront.net' 

Jetzt bin die Suche ich, dass unter bestimmten Umständen (genauer gesagt, Ausgabe von JavaScript zur Einbettung in eine andere Site) Ich muss den Asset_Host auch in der Entwicklungsumgebung setzen, der Standard-NULL wird es nicht schneiden. Im Idealfall möchte ich setzen:

config.action_controller.asset_host = 'http://localhost:3000' 

aber dieser Hafen nicht garantiert werden kann, und ich bin nur ungern zu hart Code es. Gibt es eine Möglichkeit, Asset_Host auf die aktuelle Domain und den aktuellen Port zu setzen?

Danke!

Antwort

5

Sie können von Umgebungsvariablen oder Rails initializer Parameter

config.action_controller.asset_host = ENV[ASSET_HOST].empty? ? 'http://' + Rails::Server.new.options[:Host] + ':' + Rails::Server.new.options[:Port] : ENV[ASSET_HOST] 

Auf diese Weise machen, wenn Sie die Umgebungsvariable verwenden Sie diese Adresse sonst wird es den Standardwert verwenden .

+0

Der Rails :: Server.new.options Hash war die Antwort, die ich suchte. Vielen Dank! – superluminary

+0

Das ist ein nützlicher Hashwert. – superluminary

3

Dieser Wert ist bei der Inbetriebnahme zur Verfügung und helfen kann:

Rails::Server.new.options[:Port] 

Versuchen Sie, auf die asset_host Variable Ihrer development.rb Datei hinzufügen.

Auf der Grundlage dieser Antwort: https://stackoverflow.com/a/13839447/1882605

0

Versuchen:

class ApplicationController < ActionController::Base 
before_filter :find_asset_host 

private 

    def find_asset_host 
    ActionController::Base.asset_host = Proc.new { |source| 
     if Rails.env.development? 
      "http://localhost:3000" 
     else 
      {} 
     end 
     }  
    end 
+0

Cool, aber immer noch hardcoded. Auf der anderen Seite haben wir in diesem Kontext Zugriff auf das Anfrageobjekt. – superluminary

+0

Sie können "http: // localhost: 3000" in Config speichern und den Wert hier abrufen. –

1

In Rails 4 verwenden wir ein dynamisches asset_host mit einem proc Einstellung:

# in /config/environments/development.rb 

Rails.application.configure do 
    config.action_controller.asset_host = Proc.new { |source, request| 
    # source = "/assets/brands/stockholm_logo_horizontal.png" 
    # request = A full-fledged ActionDispatch::Request instance 

    # sometimes request is nil and everything breaks 
    scheme = request.try(:scheme).presence || "http" 
    host = request.try(:host).presence || "localhost:3000" 
    port = request.try(:port).presence || nil 

    ["#{scheme}://#{host}", port].reject(&:blank?).join(":") 
    } 

    # more config 
end 

Dieser Code sorgt dafür, dass Anfragen von localhost: 3000, localhost: 8080, 127.0.0.1 : 3000, local.dev und andere Setups funktionieren einfach.

Verwandte Themen