2013-05-09 5 views
7

에서 설정 config.action_controller.asset_host를 설정하는 방법이 있나요 : 내가 지금처럼 CloudFront를 내 asset_host을 설정 내 production.rb에서 개발

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

는 지금은 찾는거야가 구체적으로 어떤 상황 (에, 다른 사이트에 임베드 된 JavaScript 출력) 개발 환경에서 asset_host도 설정해야합니다. 기본 null은이를 잘라 내지 않습니다. 이상적으로는 설정할 :

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

하지만,이 포트는 보장 할 수 없습니다, 나는 하드 코딩 그것을 꺼려 해요. asset_host를 현재 도메인 및 포트로 설정하는 방법이 있습니까?

감사합니다.

답변

5

하는 당신은 환경 변수 또는 레일 초기화 매개 변수

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

이 방법을 사용할 수있다 :이 답변에 따라

.

+0

Rails :: Server.new.options 해시가 내가 찾던 해답이었다. 감사! – superluminary

+0

유용한 해시를 알고 있습니다. – superluminary

3

이 값은 시작하는 동안 사용할 수 있고 도움이 될 수 있습니다 :

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

시도가 development.rb 파일의 asset_host 변수에 추가. 당신은 당신이 그렇지 않으면 기본값을 사용하는 주소를 사용하는 환경 변수를 설정하면 https://stackoverflow.com/a/13839447/1882605

0

시도 : 레일 4에서

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

config에 "http : // localhost : 3000"을 저장하고 여기에 값을 가져올 수 있습니다. –

1

우리가 PROC로 설정 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 및 다른 설치 프로그램이 작동합니다.

관련 문제