プッシュや設定を変更せずに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クライアントには何もありませんか?
マットボール

直接的な回答ではありませんが、SAAS機能に依存するなど、依存関係の変更を文書化することは常に賢明です。私のアドバイスは、この機能に依存していることを言及しているCHANGELOGにエントリを追加し、その変更をプッシュして、ナメクジ。
patcoll 2013年

回答:


93

Slugコンパイルはgit pre-recieveフックで呼び出されるため、再コンパイルする唯一の方法は新しいコミットをプッシュすることです。

完全性については、slugコンパイラーについてのHerokuに関するこの記事を参照してください。それは、コンパイルの見出しの下でスラッグコンパイルプロセスを呼び出すためのpre-receiveフックの使用について説明しました。


23
ご回答有難うございます。git pre-receiveフックがスラッグをコンパイルすることは事実です。(たとえば、devcenter.heroku.com / articles / slug-compilerを参照してください)。これは必ずしも、herokuがheroku CLIコマンドなどのスラッグコンパイルを呼び出すための代替メカニズムを提供しない(または提供できなかった)ことを意味するわけではありません。とは言っても、そのようなコマンドについては誰も言及していません。そのため、少なくとも今のところ、あなたの答えは正しいと思います。ありがとう!
ネイサン

1
@ネイサンたぶん、Heroku Toolbeltを介してスラグコンパイルをトリガーする方法をHerokuサポートに依頼できますか?彼らがそれのために行くなら、別の答えを追加してください!
culix 2012

7
今、解決策があります。Herokuの-レポアドオン
Refaelアッカーマン

参考までに、Rails application.jsにコンパイルされるjsファイルの設定に新しいENV値がある場合、このソリューションは機能しませんでした。jsファイルにスペースをコミットし、アセットを実際に再コンパイルするようにプッシュする必要がありました。
Josh Diehl、2014年

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 2013

2
これをあなたの~/.profileadd thisのエイリアスを補完するために: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にはまだこの機能がありません。Herokuの側の問題が原因で展開に失敗することはよくあります。

-C HEADエディターを開かないようにするためのアイデアを提供してくれたMichael Miorに感謝します。


2
またはgit commit --amend -C HEAD、エディタをまったく開かずにコミットメッセージを同じに保つために使用します。
Michael Mior 2014年

@MichaelMiorに感謝します。これは私にとってはうまくいき、私の知覚したgitの履歴を台無しにしませんでした。
James Ward、

ここで注意すべきことの1つは、(herokuに加えて)中央レポが異なる場合です。もしそうなら、これはあなたがすでに最後のコミットをすでにプッシュしている場合、次にプルしたときに履歴のコミットのマージ/複製になります。
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 2015

6
heroku-repoの現在のバージョンには、rebuildサブコマンドがありません
Mike Slinn

rebuildコマンドが機能しないため、リモートリポジトリをリセットする必要があります
vaibhav jain

あなたが更新し、それが「ビルドAPI」で動作すると言いましたが、私はそれがどのように動作するのか本当に理解していません...何か助けですか?アプリを再構築するには、HTTP POSTリクエストをAPIに送信する必要がありますか?どっち?トークン(セキュリティ上の理由)はありますか?
ダム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

「プッシュは拒否されました、マスターブランチを削除できません」という結果になります。
スケーリー2014

-15

git push --force 動作するはずです:)


3
うーん、「すべて最新のもの」を受け取ります。
Brad Koch
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.