ruby on rails - Rails 로컬 자산:사전 컴파일-변경 사항을 자동으로 검사 할 수 있습니까?




ruby-on-rails git (2)

배포 도중 자산 사전 컴파일 문제가 발생하여 로컬 사전 컴파일을 수행하고 결과 파일을 소스 트리에 체크인하는 방법을 선택했습니다. 나는 사전 컴파일 작업을 실행하고 자산을 미리 컴파일하지 않고 릴리즈하는 것을 잊지 않는다는 제외하고는 이 접근법에 아무런 문제가 없습니다! :(

누군가 자산 변경이 발생했는지 확인하기 위해 어떤 방법을 찾아 왔는지 궁금합니다. 이상 적으로 CI 서버에 대한 일종의 검사를 실행하고 커밋되지 않은 자산 변경 사항이있는 경우 빌드를 실패하고 싶습니다.

나는 몇 가지 생각을했다.

  1. RAILS_ENV=production bundle exec rake assets:precompile CI 서버에서 RAILS_ENV=production bundle exec rake assets:precompile 하고 출력이 있는지 확인합니다. (애셋이 최신 상태 인 경우 명령이 아무 것도 출력하지 않는 것처럼 보입니다.) 그러나 명령을 로컬에서 실행하고 결과를 커밋 한 후 명령 출력이 어떻게 든 실행 환경에 묶여있는 것처럼 보입니다. CI 서버에서 명령을 실행하면 명령에서 여전히 출력됩니다! 이것이 환경에 묶여있는 이유를 알고 싶습니다.하지만 rake assets:precompile 의 소스를 찾을 수조차 없습니다. 레일 github repo에서 rake assets:precompile 하십시오. 누구든지 그 소스가 어디 있는지 알고 있습니까?

  2. 어떻게 든 git 내역을 살펴보고 마지막 사전 컴파일 이후 assets/ 폴더 내에서 자산이 변경되었는지 확인할 수있는 명령을 작성하십시오. 그게 어떻게 효과가 있을지 모르겠다.

이것은 두세 번 이상 나에게, 그리고 때로는 동료가 자산 변경을 할 때 그것을 잡지 못합니다 - 실제로 이것은 컴퓨터가 인간을 잡을 수 있어야하는 것처럼 보입니다. 다소 합리적 인 세 번째 대안은 CI 서버가 단순히 명령을 실행하고 생성 된 파일을 소스 트리에 자동으로 커밋하는 것이지만 CI 서버가 커밋을하는 것을 좋아하지 않습니다.

이견있는 사람? 감사.


나는 같은 노력을 기울이고 있지만이 문제를 해결할 수는 없습니다. 첫번째 단계는 git pre-commit 훅을 사용하여 자산을 컴파일하는 것입니다 (수정 된 자산이있는 경우에만 수행합니다).

http://jimneath.org/2012/05/05/precompile-assets-using-a-git-hook.html

편집 : 링크가 누크 된 것처럼 보입니다. 보관 된 버전은 다음과 같습니다. https://web.archive.org/web/20161022195654/http://jimneath.org/2012/05/05/precompile-assets-using-a-git-hook.html


내 대답은 Git 기반, OP 생각의 구현 2 : assets/ 소스가 assets-precompile/ 현재 체크인 assets-precompile/ 보다 최신임을 나타내는 Git 메타 데이터를 기반으로 빌드를 실패 할 수 있습니까? 체크 아웃 환경의 조건이나 Rails 빌드에 대한 지식을 토대로 해답을 향상시킬 수 있습니다.

  1. git log -1 --format=%ct -- assets/ 는 최신 소스 커밋의 타임 스탬프를 제공합니다.
  2. git log -1 --format=%ct -- assets-precompile/ 은 가장 최근의 사전 컴파일 체크인의 타임 스탬프를 제공합니다.

이 두 숫자를 비교하는 빌드의 초기에 조건을 추가하고 1> = 2이면 릴리스 빌드를 모두 실패하십시오. 사실, 거기에 유예 기간을 구축하고자 할 수도 있습니다. 예를 들어 누군가가 계산을하고 사전 컴파일을 실행할 때, 그리고 커밋 할 때 중간에 커밋을해야합니다.

대안으로, 이보다 엄격 해지기 위해서는 파일에 {{assets /}}의 커밋 해쉬를 저장하고, 마지막 프리 컴파일시와 다른 점이 있다면 다시 릴리즈 빌드를 실패 할 때까지 다시 사전 컴파일되고 체크인됩니다.

git log --format=%H -- assets/

... 미리 커밋으로 업데이트 한 커밋 - 해시와 비교해보십시오. 또한 커밋 - 해시 대신 트리 해시에 %T 를 사용하여 분기를 단순화 할 수 있습니다.





sprockets