2013-05-09 2 views
7

В моем production.rb я установил мой asset_host в CloudFront так:Есть ли способ, чтобы установить набор config.action_controller.asset_host в развитии

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

Теперь я нахожу, что в некоторых случаях (в частности, вывод JavaScript должен быть встроен в другой сайт) Мне нужно установить asset_host в среду разработки, нулевой по умолчанию не будет его обрезать. В идеале я хочу установить:

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

, но этот порт не может быть гарантирована, и я неохотно жестко закодировать его. Есть ли способ установить asset_host в текущий домен и порт?

Спасибо!

ответ

5

Вы можете использовать переменные окружения или Rails параметров инициализатора

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

Таким образом, если вы установите переменную окружения использовать этот адрес в противном случае он будет использовать по умолчанию ,

+0

The Rails :: Server.new.options hash был ответом, который я искал. Благодаря! – superluminary

+0

Это полезный хэш, о котором нужно знать. – superluminary

3

Это значение доступно при запуске и может помочь:

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

Попробуйте добавить его в переменную asset_host вашего файла development.rb.

На основании этого ответа: https://stackoverflow.com/a/13839447/1882605

0

Try:

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

Прохладный, но все еще жестко закодированный. В верхнем пределе мы имеем доступ к объекту запроса в этом контексте. – superluminary

+0

Вы можете сохранить «http: // localhost: 3000» в config и вывести его значение здесь. –

1

В Rails 4 мы используем динамический asset_host установка с прока:

# 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 

Этот код гарантирует, что запросы от локального хоста: 3000, локальный: 8080, 127.0.0.1 : 3000, local.dev и любая другая настройка.

Смежные вопросы