사전 컴파일 된 자산이 개발 모드에서 제공되는 것을 방지하는 방법은 무엇입니까?
개발 모드에서 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
'programing' 카테고리의 다른 글
div에서 innerHTML 제거 (0) | 2021.01.17 |
---|---|
목록 이외의 시퀀스에 대한 스칼라 패턴 일치 (0) | 2021.01.17 |
Python에서 "홈 디렉토리"를 찾으십니까? (0) | 2021.01.17 |
MySQL-기존 데이터를 손상시키지 않고 데이터베이스에서 기존 열의 varchar 크기를 늘리는 방법은 무엇입니까? (0) | 2021.01.17 |
Cdecl 호출이 "표준"P / Invoke 규칙에서 종종 일치하지 않는 이유는 무엇입니까? (0) | 2021.01.17 |