2016-06-14 5 views
0

테스트 환경에서 Webrick을 사용하여 테스트 된 Ruby-on-Rails 앱을 실행하고 있습니다. 자동화 된 end-to-end 테스트는 다른 관리 페이지에서 사용되는 JavaScript 파일을 업데이트하는 관리 페이지에 액세스합니다. 문제는 두 번째 관리 페이지에 업데이트가 표시되지 않고 대신 자바 스크립트 파일의 이전 복사본을 가져 오는 것입니다. 파일 시스템에서 변경된 파일을 볼 수 있지만 명령 줄에서 컬을 사용하더라도 여전히 파일의 이전 버전을 얻습니다. 테스트에 사용되었습니다 (적어도 4.1에서는 Rails 4.0 이상). 이 문제가 발생했다는 것을 Rails 4.2로 업데이트하려고하고 있습니다.파일 변경으로 인해 스프로킷 캐시가 무효화되지 않았습니다.

Rails/Sprockets에 업데이트 된 JavaScript의 캐시 된 사본을 잊어 버릴 수있는 방법이 있습니까? 나는 내가 그것을 업데이트 할 때 알고 있으며, Sprocket의 전체 캐시를 재설정 할 수 없다면 다시 초기화하는 것을 신경 쓰지 않을 것입니다. 내가 할 수없는 일은 자바 스크립트 파일이 업데이트 될 때마다 서버를 다시 시작하는 것입니다.

답변

0

스프로킷을 캐시 된 복사본을 "잊어 버리는"방법을 여러 번 시도했지만 기억하기로 결정한 것처럼 보였습니다. 나는 확고하게 확고부동 한 디자인 결정에 맞서 싸우고 있다는 느낌을 받기 시작했습니다. 결국 나는 생성 된 on-the-fly 자바 스크립트 파일을 위해서, 파일의 컴파일과 핑거 프린팅을 직접 처리하고, 생성 된 파일에 대해 javascript_include_tag의 자체 버전을 작성하는 것을 의미하는 톱니 바퀴를 피할 것이라고 결정했습니다. . 참고로

는, 컴파일 및 지문은 매우 쉽게 실제로 :

require "uglifier" 
require "digest" 

minified_content = Uglifier.compile(File.read(my_generated_js_file)) 
fingerprint = Digest::MD5.hexdigest(minified_content) 
fingerprinted_file = File.basename(basename, '.js') + '-' + fingerprint + '.js' 

(다음 단지 공공/자산에 지문 파일을 쓰기).