일부 이미지 자산에 대해 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/assets
및 tmp
폴더를 삭제해야했다.
그렇다면 Staging의 자산이 잘못된 CloudFront 배포를 가리킬 수있는 이유는 무엇입니까?
업데이트 : 다른 자산 (css 파일)에서 asset_path
(으)로 참조 된 자산 만 잘못된 CDN 호스트를 얻는 것으로 나타났습니다. 한편 image_tag
을 사용하는보기에서 표시되는 애셋은 올바르게 작동합니다. 이 문제는 자산을 미리 컴파일하는 중에 발생한다고 생각합니다. 잘못된 URL은 CSS 파일의 asset_path
에서 출력됩니다. 왜 그래도. 나는 rake RAILS_ENV=production assets:clean assets:precompile
을 호출하고 있는데, 나는 말했듯이, production.rb를 명시 적으로 테스트로서 만 스테이징 CDN을 사용하도록 수정하려고 시도했지만 여전히 그것을 사용하지 않았습니다 (자산은 여전히 프로덕션 CDN을 가리 킵니다).
온건성 검사와 마찬가지로 if/else를 사용해 보셨습니까? – pdoherty926
나는 새 니티 체크를 더 많이했고 설정을 단지'config.action_controller.asset_host = 'yyyy.cloudfront.net ''으로 바꾸었고 여전히 내 이미지는'xxxx.cloudfront.net '을 가리키고있다. –