2012-04-18 5 views
11

특정 컨트롤러가 액세스 할 때 자산 호스트를 변경하는 방법을 찾으려합니다.컨트롤러의 자산 호스트를 전환하십시오.

컨트롤러는 https 프로토콜을 통해 엄격하게 액세스해야하므로 https를 사용하여 자산 호스트를 전환해야합니다. 현재 자산 호스트는 S3에 연결된 CNAME 하위 도메인으로 설정되어 있으며 SSL 인증서가 연결되어 있지 않습니다. 달성하고자하는 것은 현재 자산 호스트를 https Amazon S3 URL로 대체하는 것입니다. 걱정되는 유일한 자산은 CSS와 JS입니다.

나는 도우미를 사용하여 stylesheet_link_tag와 javascript_include_tag에서 호스트를 제거하고 https Amazon S3 URL로 대체하려고 생각했습니다. 비록 나에게 조금 hackish 보인다.

또는 아마도 request.ssl ​​인 경우 자산 호스트를 변경하는 방법이 있습니까? 사실이다?

레일 3.2.x를 사용하고 있습니다.

답변

16

내 경우에 대한 해결책을 찾아보십시오.

request.ssl의 논리를 처리하기 위해 프로덕션 환경 파일에서 config.action_controller.action_host의 Proc를 사용하여 종료 되었습니까? 그에 따라 응답하십시오. 여기에 (당신이 자산 도우미 태그를 사용하는 경우 CSS와 JS) asset_host이 자산 파일에서 호출되는 경우를 수용하기 위해 전무로 설정되는 코드

config.action_controller.asset_host = Proc.new { |source, request = nil, *_| 
    request && request.ssl? ? 'https://s3.amazonaws.com/my_bucket' : 'http://s3.my-domain.com' 
} 

'요청하기'입니다. 요청이 존재하지 않고 요청이 args에 할당되지 않은 경우 자산이 컴파일 될 때 오류가 발생합니다 (아래 그림 참조).

This asset host cannot be computed without a request in scope. Remove the second argument to your asset_host Proc if you do not need the request, or make it optional. 

* 표시 _ 때문에, 내 응용 프로그램이 멀티 테넌트가하고 하위 도메인에 따라 데이터베이스,이 솔루션 것처럼 작동합니다 스왑 발동 http://bugs.ruby-lang.org/issues/5694

+0

이 대단한에서 옵션 인수 버그에 존재 그럼 asset_host에 대한 하위 도메인을 변경하십시오. 한 가지 질문은 어떻게 테스트를 작성 하시겠습니까? –

관련 문제