2013-05-09 11 views
7

W moim production.rb mogę ustawić asset_host do CloudFront tak:Czy istnieje sposób, aby ustawić zadaną config.action_controller.asset_host w rozwoju

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

Teraz jestem stwierdzenia, że ​​w pewnych okolicznościach (w szczególności, generowanie JavaScriptu do osadzenia w innej witrynie) Potrzebuję ustawić asset_host także w środowisku programistycznym, domyślna wartość null go nie zmniejszy. Idealnie chcę ustawić:

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

, ale ten port nie może być zagwarantowany, a ja niechętnie go koduję. Czy istnieje sposób, aby ustawić asset_host do bieżącej domeny i portu?

Dzięki!

Odpowiedz

5

można skorzystać zmiennych środowiskowych lub szyn parametrów initializer

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

ten sposób, jeśli ustawić zmienną środowiskową użyć tego adresu w przeciwnym razie użyje domyślnego .

+0

Hash Rails :: Server.new.options była odpowiedzią, której szukałem. Dzięki! – superluminary

+0

Jest to przydatny skrót, o którym warto wiedzieć. – superluminary

3

Wartość ta jest dostępna podczas uruchamiania i może pomóc:

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

spróbuj dodać go do zmiennej asset_host swojego pliku development.rb.

Na podstawie tej odpowiedzi: https://stackoverflow.com/a/13839447/1882605

0

Spróbuj:

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

Fajne, ale wciąż na stałe. Z drugiej strony mamy dostęp do obiektu żądania w tym kontekście. – superluminary

+0

Możesz zapisać "http: // localhost: 3000" w config i pobrać jego wartość tutaj. –

1

W Rails 4 używamy dynamiczny asset_host ustawienie z proc:

# 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 

Kod ten zapewnia, że ​​wnioski z localhost: 3000 localhost: 8080, 127.0.0.1 : 3000, local.dev i wszelkie inne ustawienia działają.

Powiązane problemy