5

나는 현재 내가 다시 내 실제 웹 서버로 가리키는 정의 원점 아마존 CloudFront를하여 사용하고자하는 레일 3 프로젝트에서 일하고 있어요Rails asset_tag URL의 형식을 변경하려면 어떻게해야합니까?

배경입니다. 이것은 내 웹 서버가 CloudFront에서 정적 자산을 검색하도록 브라우저에 지시 할 것임을 의미합니다. CloudFront에 캐시 된 자산이 있으면 반환하고, 그렇지 않으면 내 웹 서버에서 동일한 경로를 사용하여 검색하고 나중에 캐시합니다. 요청.

문제

아마존 CloudFront를이 떨어지고 결정할 때 그것이 원점이야에서 자산을 다시 다운로드 할 수있는 자체 캐시의 파산 여부를 쿼리 문자열 매개 변수를 무시합니다. 이것은 분명히 레일스가 RAILS_ASSET_ID URL을 생성하는 방법에 문제를 일으킬 것입니다 : /assets/path/to/asset.ext?RAILS_ASSET_ID. CloudFront는 기본 자산 URL을 사용하여 최대 24 시간 동안 부실 자산을 보유합니다.

솔루션?

레일스 3에서 자산 태그를 생성하는 방식을 어떻게 바꾸어도 /assets/RAILS_ASSET_ID/path/to/asset.ext과 같은 URL을 생성 할 수 있습니다. 나는 이미 웹 서버가 그 URL에 응답하도록하는 방법에 대한 해결책을 가지고있다. 레일즈가 URL을 생성하는 방법을 알아 내야한다.

노트

  1. RAILS_ASSET_ID 내 최신 자식의 하위 문자열을 해시를 저지 할 것이다. 이 설정은 배포 과정에서 capistrano가 처리합니다. 각 배포에서 모든 자산 캐시를 파기해도 괜찮습니다. 자산 고유 ID가 필요하지 않습니다.
  2. 이미 ActionView::Helpers::AssetTagHelper.rewrite_asset_path을 무시하려고 시도했지만 작동하지 않는 것으로 보입니다. 방법을 의지해서는 안됩니다.
  3. 미리 감사드립니다.

답변

4

"ActionController::Base.config.asset_path을 수정되지 않은 애셋 경로를 사용하고 애셋 캐싱이 작동하는 데 필요한 경로를 반환하는 proc로 설정하십시오."

설명서의 내용은 AssetTagHelper입니다.

+0

나는 이것을 놓친 방법이 확실하지 않지만 최대한 빨리 테스트 할 것입니다. –

+0

이것이 해결책이라고 확인했습니다. 어떻게 든 놓친 명백한 것에 대해 경고 해 주셔서 감사합니다. –

1

asset_id plugin으로 문제를 해결할 수 있습니다. Amazon S3 및 CloudFront를 지원합니다.

+0

일부 애셋이 동적으로 생성되기 때문에이 플러그인은 Amazon S3를 CloudFront의 근원으로 사용하고 있음을 요구합니다. 그래도 고마워, 다른 프로젝트에서 유용 할 수있는 깔끔한 플러그인이다. –

관련 문제