푸시 또는 구성 변경없이 Heroku 슬러그를 다시 컴파일


147

새로운 커밋을 푸시하거나 구성 변수를 업데이트하지 않고 Heroku가 슬러그를 다시 컴파일하도록 강제하는 방법이 있는지 궁금합니다.

왜 내가 이것을하고 싶습니까? :

Heroku의 Cedar 스택을 Rails 3.2 앱에 사용하고 있는데 rake assets:precompile작업 실패 문제가 있습니다 (컴파일 중 --- 나중에는 잘 작동합니다 heroku run). 나는 이것이 슬러그 컴파일 시간 동안 특정 환경 변수를 사용할 수 없기 때문이라고 생각하며 heroku labs:enable user_env_compile실험적인 기능으로 해결할 수 있다고 생각합니다 .

그러나 user_env_compile기능이 켜져 있으면 구성 변경으로 인해 슬러그 재 컴파일이 트리거되지 않으며 코드가 변경되지 않았으므로 푸시 할 새로운 커밋이 없습니다.

물론 사소한 변경으로 "더미"커밋을 푸시 할 수 있습니다. 아마도 가장 간단한 대답입니다. --- 슬러그를 직접 다시 컴파일 할 수있는 heroku 명령이 있는지 궁금합니다.

감사!


1
heroku CLI 클라이언트에 아무것도 없습니까?
— Matt Ball

직접적인 대답은 아니지만 SAAS 기능 등에 의존하는 것과 같은 종속성 변경 사항을 문서화하는 것이 항상 현명합니다. 내 조언은이 기능에 의존한다고 언급하는 곳에 CHANGELOG에 항목을 추가하고 해당 변경 사항을 밀어서 강타.
— patcoll

답변:


93

슬러 컴파일은 git pre-recieve 훅으로 호출되므로 재 컴파일하는 유일한 방법은 새로운 커밋을 푸시하는 것입니다.

완전성에 대해서는 슬러그 컴파일러 에 대한 Heroku의이 기사를 참조하십시오 . 컴파일 표제 아래에서 슬러그 컴파일 프로세스를 호출하기 위해 사전 수신 후크 사용에 대해 설명했습니다.


23
답변 주셔서 감사합니다. git pre-receive hook이 슬러그를 컴파일하는 것은 사실입니다. (예 : devcenter.heroku.com/articles/slug-compiler 참조 ). 그렇다고해서 heroku가 heroku CLI 명령과 같은 슬러그 컴파일을 호출하기위한 대체 메커니즘을 제공하지는 않습니다. 즉, 아무도 그러한 명령을 언급하지 않았으므로 적어도 지금은 귀하의 답변이 제자리에 있다고 가정합니다. 감사!
— Nathan

1
@Nathan Heroku Toolbelt를 통해 슬러그 컴파일을 트리거하는 방법을 Heroku 지원에 요청할 수 있습니까? 그들이 갈 경우 다른 답변을 추가하십시오!
— culix

7
이제 해결책이 있습니다. 에게 Heroku - 환매 특약 추가 기능
— Refael ACKERMANN

참고 로이 솔루션은 Rails application.js로 컴파일되는 js 파일의 설정에 대한 새로운 ENV 값이있을 때 작동하지 않았습니다. js 파일에 공간을 커밋하고 실제로 자산을 다시 컴파일하도록 푸시했습니다.
— Josh Diehl

12
repo:rebuild여기에서 알 수 있듯이 플러그인에서 유효한 명령은 더 이상 없습니다 : github.com/heroku/heroku-repo/commit/...
— blindstuff은

234

현재 가장 간단한 해결 방법 은 빈 커밋 을 푸시하는 것 입니다.

git commit --allow-empty -m "empty commit"
git push heroku master

53
다음에 이전 커밋을 강제로 푸시하여이를 수행하고 깨끗한 커밋 기록을 유지할 수 있습니다 git reset HEAD~; git push -f heroku master. 다른 Heroku 배포에는 시간이 걸리지 만 역사는 FTW입니다.
— Paul Annesley

2
이 별명을 보완하기 위해 다음을 ~/.profile추가하십시오 : alias heroku-rebuild="git reset HEAD~; git push -f heroku master"또는 alias heroku-rebuild="git commit --allow-empty -m 'empty commit' && git push heroku master"간단히 입력 할 수 있습니다heroku-rebuild
— unmultimedio

30

내 일반적인 접근 방식은 다음과 같습니다.

git commit --amend -C HEAD
git push heroku:master -f

기술적으로 마지막 커밋을 다시 작성하지만 이론상 문제를 일으키지 않기 때문에 확실하지 않고 프로덕션 에서이 작업을 수행 할 것인지 확실하지 않습니다. 스테이징에서 테스트 할 때 완벽하게 좋습니다.

대부분의 사람들은 Vim을 사용하여 커밋 메시지를 편집하는 데 문제가 있기 때문에 추가 보너스로 SHIFT-ZZ커밋 메시지를 변경하지 않고 빠르게 저장하고 종료합니다.

관련 메모에서 나는 헤 로쿠에 약간 충격을 받았지만 여전히이 기능을 가지고 있지 않습니다. 나는 종종 Heroku가 결국 문제로 인해 전개되지 않는 것을 보았습니다.

-C HEAD에디터를 열지 않기 위해 사용할 아이디어에 대해 Michael Mior에게 감사드립니다 .


2
또는 git commit --amend -C HEAD편집기를 전혀 열지 않고 커밋 메시지를 동일하게 유지하는 데 사용하십시오.
— Michael Mior

감사합니다 @MichaelMior 이것은 나를 위해 훌륭하게 작동했으며 인식 된 git history와 혼동하지 않았습니다.
— 제임스 워드

여기서주의해야 할 것은 헤 로쿠 외에 다른 중앙 저장소가있는 경우입니다. 그렇다면 마지막 커밋을 이미 푸시 한 경우 다음에 가져올 때 히스토리에서 커밋의 병합 / 복제가 발생합니다.
— Nick F

왜 이렇게 안티 사용자입니까?
— Lucke

20

Heroku는 다음과 같은 플러그인을 출시했습니다 : https://github.com/heroku/heroku-repo

설치하려면 :

$ heroku plugins:install heroku-repo

재 구축을 강제하려면 :

$ heroku repo:purge_cache -a appname
$ heroku repo:reset -a appname
$ git push heroku

15

업데이트 : heroku repo : rebuild가 제거되었습니다 .

Heroku에는 사용할 수있는 Build API가 있습니다. API를 사용하여 빌드 및 릴리스를 참조하십시오.


heroku-repo 애드온 인 경우 repo : rebuild 명령을 사용할 수 있습니다 .

heroku repo:rebuild -a appname

https://github.com/heroku/heroku-repo


3
그냥뿐만 아니라 다른 스레드에 댓글을하지만, 그것의 가치는 여기에 반복하십시오에게 Heroku - REPO 애드온 외모의 좋은,하지만 그것을 시도 후 나는 할 수 없습니다 그것을하는 것이 좋습니다. 나쁜 버그가 있습니다 : --app 플래그를 무시합니다. 이로 인해 스테이징을 재구성 할 때 실수로 프로덕션 환경을 재구성했습니다. 이 버그는 해결 방법없이 1 년 이상 레포에 대해 공개되었습니다. 이 플러그인을 제거했습니다.
— jasoncrawford

6
heroku-repo의 현재 버전에는 rebuild 하위 명령이 없습니다
— Mike Slinn

재 구축 명령이 작동하지 않아서 원격 저장소를 재설정해야합니다.
— vaibhav jain

업데이트하고 "Build API"와 함께 작동한다고 말하지만 작동 방식을 실제로 이해하지 못합니다 ... 어떤 도움? 앱을 다시 빌드하려면 API에 HTTP POST 요청을 보내야합니까? 어느 것? 토큰 (보안 이유)이 있습니까?
— Dam Fa


5

이를위한 heroku 플러그인 이 있습니다.

$ heroku plugins:install heroku-releases-retry
Installing plugin heroku-releases-retry... done
$ heroku releases:retry
Retrying v16 on ⬢ murmuring-lowlands-3398... done, v17

3
실패한 릴리스 후에 릴리스를 재 시도합니다. 실패한 빌드를 재 시도하지 않습니다.
— 제레미

-3

가지를 제거한 다음 다시 밀어 넣으십시오. 플러그인을 사용할 필요가 없습니다.

git push heroku :master
git push heroku master

"푸시 거부, 마스터 분기를 삭제할 수 없습니다"가 발생합니다.
— skalee

-15

git push --force 작동해야합니다 :)


3
흠, 나는 "모든 것이 최신"입니다.
— Brad Koch
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.