programing

사전 컴파일 된 자산이 개발 모드에서 제공되는 것을 방지하는 방법은 무엇입니까?

nicescript 2021. 1. 17. 10:34
반응형

사전 컴파일 된 자산이 개발 모드에서 제공되는 것을 방지하는 방법은 무엇입니까?


개발 모드에서 JavaScript 파일을 연결 하지 않고 개별 파일로 제공하는 것을 선호 합니다. 그래서 구성했습니다.

development.rb :

config.assets.compress = false
config.assets.debug = true
config.assets.compile = true

내 / app / assets / javascript 디렉토리에 다음이 있습니다.

  • reviews.js
  • 리뷰 /
    • foo.js
    • bar.js

reviews.js :

//= require jquery
//= require jquery_ujs
//= require_tree ./reviews

<%= javascript_include_tag "reviews" %>내 레이아웃에 사용하는 JavaScript를 포함합니다 . 생성 된 페이지는 세 개의 스크립트를 개별적으로 올바르게 참조하며 reviews.js기본적으로 비어 있습니다. 여태까지는 그런대로 잘됐다.

이제 rake assets:precompile세 개의 JavaScript 파일을 사용 하여 프로덕션 용 자산을 미리 컴파일 하면 reviews.js. 이것은 프로덕션에서는 모두 문제가 없지만 이제 개발 모드 에서는 두 개의 개별 파일 과 함께 연결된 파일 reviews.js이 제공 됩니다 .

물론, 이것은 개발할 때 모든 종류의 불쾌한 버그로 이어집니다. 왜냐하면 지금은 foo.js의 콘텐츠 bar.js가 두 번 제공되며 그중 하나는 reviews.js.

Rails가 개발 모드에서 사전 컴파일 된 자산을 사용하지 않도록하려면 어떻게해야합니까?


로컬에서 미리 컴파일하는 것 같습니다. 파일이 예상 위치에 있기 때문에 개발 서버에서 제공하고 요청이 Sprockets로 이동하지 않습니다.

이를 중지하는 유일한 방법은 컴파일 된 파일을 삭제하는 것입니다.

일반적으로 로컬에서 컴파일 할 필요가 없습니다. 거의 모든 경우에 사전 컴파일 작업은 앱 배포 중에 실행될 것으로 예상됩니다. 자산 파이프 라인 가이드 페이지에 이에 대한 Capistrano 레시피가 있습니다.

해당 파일을 리포지토리에 로컬로 커밋해야하는 경우 브랜치를 사용하여 문제를 피할 수 있습니다. 프로덕션 코드 용으로 마스터 브랜치를 예약하고 dev 용으로 두 번째 브랜치를 만듭니다. 마스터에서만 자산을 컴파일하고 커밋하십시오. dev로 전환하면 사라집니다. 필요에 따라 dev를 마스터에 병합합니다.

편집 : 브라우저를 강제로 업데이트해야합니다 (Ctrl + F5). 그렇지 않으면 브라우저 캐시에서 사용 된 이전 자산을 찾을 수 있습니다!


에서 config/environments/development.rb설정 :

config.assets.prefix = "/assets_dev"

그래서 개발 모드에서 Rails는 거기를 볼 것입니다 (그러나 개발 중에 자산을 컴파일하지 않을 것이므로 아무것도 찾을 수 없습니다 (이것은 실제로 자산을 컴파일하지 않고 수행하려는 것입니다)).

프로덕션 을 위해 사전 컴파일 할 때

RAILS_ENV=production rake assets:precompile

따라서 기본 자산 폴더 인 public/assets.


에서 config/environments/development.rb설정 :

config.serve_static_assets = false

의 파일 /public이 제공 되지 않습니다.


나는 이것을 시도했고 효과가 있었다. rake assets:precompile RAILS_ENV=production

나는 당신이 실행할 때 자산 파이프 라인의 새 버전이 작업을 수행하는 것을 관찰 rake assets:precompile하지rake assets:precompile:all

참조 URL : https://stackoverflow.com/questions/8013478/how-to-avoid-precompiled-assets-being-served-in-development-mode

반응형