2014-06-30 2 views
1

일부 이미지 자산에 대해 CloudFront를 CDN으로 사용하여 Heroku에서 Rails 4 앱을 실행 중입니다. 프로덕션 앱과 스테이징 앱이 있습니다. CloudFront에서 Production과 Staging을위한 별도의 배포판을 제공합니다. 자산을 로컬에서 사전 컴파일하여 Heroku에 전달합니다.레일 4 잘못된 CloudFront 도메인 이름을 가리키는 이미지 이미지 자산

# production.rb 
config.action_controller.asset_host = 'xxxx.cloudfront.net' 
# Use special staging CDN if pushing to staging 
config.action_controller.asset_host = 'yyyy.cloudfront.net' if ENV['PUSH_TO'] && ENV['PUSH_TO'].downcase == 'staging' 

그래서 내가 준비 또는 생산을 추진하고있어 경우에 따라 다른 asset_host을 지정 해요 :

내 production.rb는 다음이있다.

그러나 준비로 이동하면 결과 이미지가 누락되어 Production CloudFront 배포를 가리 킵니다.

config.action_controller.asset_host이 올바른 스테이징 배포로 설정되도록 일부 로깅 문을 앱에 넣었습니다.

호스트를 프로덕션 호스트에서 준비 호스트로 변경하여 이미지 URL에 수동으로 액세스하면 지문이 올바르게 업데이트되었음을 ​​알 수 있습니다.

내 .css.scss.erb 파일에는 다음이 포함

.importance1 { background-image: image-url("<%= asset_path 'myImage1.png' %>"); }

내가 내 public/assetstmp 폴더를 삭제해야했다.

그렇다면 Staging의 자산이 잘못된 CloudFront 배포를 가리킬 수있는 이유는 무엇입니까?

업데이트 : 다른 자산 (css 파일)에서 asset_path (으)로 참조 된 자산 만 잘못된 CDN 호스트를 얻는 것으로 나타났습니다. 한편 image_tag을 사용하는보기에서 표시되는 애셋은 올바르게 작동합니다. 이 문제는 자산을 미리 컴파일하는 중에 발생한다고 생각합니다. 잘못된 URL은 CSS 파일의 asset_path에서 출력됩니다. 왜 그래도. 나는 rake RAILS_ENV=production assets:clean assets:precompile을 호출하고 있는데, 나는 말했듯이, production.rb를 명시 적으로 테스트로서 만 스테이징 CDN을 사용하도록 수정하려고 시도했지만 여전히 그것을 사용하지 않았습니다 (자산은 여전히 ​​프로덕션 CDN을 가리 킵니다).

+0

온건성 검사와 마찬가지로 if/else를 사용해 보셨습니까? – pdoherty926

+0

나는 새 니티 체크를 더 많이했고 설정을 단지'config.action_controller.asset_host = 'yyyy.cloudfront.net ''으로 바꾸었고 여전히 내 이미지는'xxxx.cloudfront.net '을 가리키고있다. –

답변

1

마침내 내 준비가 된 응용 프로그램이 올바른 asset_host , 그리고 파일이 올바른 CDN에서 제공되고 있었는데 그 파일 내의 URL이 잘못된 CDN (프로덕션 CDN)을 가리키고있었습니다. 이는 자산을 사전 컴파일하는 동안 PUSH_TO env 변수가 설정되지 않았기 때문에 내 production.rb는 프로덕션 CDN을 사용하고있었습니다.이 솔루션은 할이었다

rake RAILS_ENV=production PUSH_TO=staging assets:clean assets:precompile

의 핵심은 거기에서 PUSH_TO = 준비했다. 이 모든 문제가 해결되었습니다!

0

그것은이 라인에 조건이 false를 반환 것이 분명하다 :

config.action_controller.asset_host = 'yyyy.cloudfront.net' if ENV['PUSH_TO'] && ENV['PUSH_TO'].downcase == 'staging' 

어느 쪽이든 또는 asset_host 두 번 설정되는 것을 허용하지 않습니다. 왜 그렇게 될지 모르겠다. 그것을 else 블록에 넣는 것이 더 나을지도 모른다.

이렇게 수정하면 설정됩니다.

BUT ....

이 환경 파일이 아닌 이유는 무엇입니까? 환경/staging.rb 파일에이 파일이 없습니까? 거기서 작동하지 않는다면, 환경 설정을 도적질하고 여러 환경의 전체 목적을 물리 쳤습니다. ...

+0

내가 말했듯이, 나는'config.action_controller.asset_host'의 값을 확인하기 위해 로깅 문을 넣었고 스테이징 호스트로 올바르게 설정되었습니다. 나는 레일 콘솔에 연결하고 값도 확인했다. 나는 그 구성 설정을 완전히 대체하고'config.action_controller.asset_host = 'yyyy.cloudfront.net'을 남겨 두었고 여전히 이미지는'xxxx.cloudfront.net'을 가리키고있었습니다. –

관련 문제