2011-12-19 2 views
3

자산 디렉토리에 .js.erb 파일이 있습니다. 이것은 일부 로켈 특정 구성을 읽습니다.단일 js 파일의 캐싱 방지

그러나 기본 구성이 변경되면 새 파일이 내 브라우저에 제공되지 않습니다. 304가 수정되지 않습니다.

공백을 추가하여 .js.erb 파일을 변경하면 새 파일이 올바르게 제공됩니다. 내가 config를 추가 할 때마다 그렇게하는 것이 고통 스러울 것입니다.

이 특정 파일을 캐시하지 않기 위해 레일을 구성하는 방법이 있습니까?

의견을 보내 주셔서 감사합니다.

편집 : Done a bit more reading on the asset pipeline

"자산 컴파일하고 서버가 시작된 후 첫 번째 요청에 캐시 톱니가 후속 요청에 요청 오버 헤드를 줄이기 위해 반드시 재 검증 Cache-Control HTTP 헤더를 설정 -이 브라우저에. 304 (Not Modified) 응답을 얻습니다.

매니페스트에있는 파일 중 요청이 변경되면 서버가 새 컴파일 된 파일로 응답합니다. "

그래서 여기의 문제는 첫 번째 요청이 캐시 된 것입니다. 이것은 동적 자바 스크립트 파일입니다. 아마 자바 스크립트를 인라인하기 위해 캐싱되는 것을 막을 수있는 유일한 방법 일까 ??

답변

3

자산 파이프 라인을 사용하고 싶지 않으므로 캐싱을 홍보하기가 힘듭니다.

자산 파이프 라인에 맞서기보다는 실제 컨트롤러를 만든 다음 원하는대로 캐시 컨트롤 헤더를 설정할 수 있습니다.

app/views/controller_name에 js.erb 템플릿이 있으면 레일스에서 ​​렌더링해야합니다.

예를 들어 당신이 가지고 JsController라는 컨트롤러를 사용하면 응용 프로그램에 충실 다음 settings.js.erb 당신의 routes.rb 파일에

match '/javascripts/settings.js', :controller => :js, :action => :settings, :format => :js, :as => :setting_js 

를 추가 할 수 있다면/뷰 /의 JS

그런 다음 수

= javascript_include_tag settings_js_path 
+0

컨트롤러에서 js를 렌더링하는 좋은 예제가 있습니까? 내 .js.erb 파일이 app/views 아래에 있습니까? 어떻게 포함시키는 것이 가장 좋습니까? javascript_include_tag가 자산 파이프 라인을 찾은 것 같아요 = a 지시문이 필요합니다. 너무 많은 질문에 사과, 인터넷 검색을 많이 했는데이 문서 주위에 많은 문서를 찾을 수 없습니다 ... – Chris

+0

몇 가지 설명을 추가했습니다 –

2

해당 파일을 제공하는 컨트롤러 메서드에서 이와 비슷한 것을 시도해 보셨습니까?

+0

이것은 assets 디렉토리 아래에있는 javascript 파일입니다. AFAIK에는 컨트롤러가 없습니다. Rails는 서버 측에서 제공되는 파일의 첫 번째 버전을 캐시하고있는 것으로 보입니다. – Chris