푸시 또는 구성 변경없이 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.