Kompilasi ulang siput Heroku tanpa dorongan atau konfigurasi perubahan

147

Saya bertanya-tanya apakah ada cara untuk memaksa Heroku mengkompilasi ulang siput tanpa mendorong komit baru dan / atau memperbarui variabel konfigurasi.

Mengapa saya ingin melakukan ini ?:

Saya menggunakan tumpukan Cedar di Heroku untuk aplikasi Rails 3.2, dan saya mengalami masalah dengan rake assets:precompiletugas yang gagal (selama kompilasi saja --- nanti berfungsi dengan baik dengan a heroku run). Saya sangat curiga ini karena variabel lingkungan tertentu tidak tersedia selama waktu kompilasi siput, dan saya pikir heroku labs:enable user_env_compilefitur eksperimental akan menyelesaikan ini.

Namun, dengan user_env_compilefitur dihidupkan, perubahan konfigurasi tidak memicu kompilasi ulang siput, dan kode saya tidak berubah, jadi saya tidak punya komitmen baru untuk mendorong.

Tentu saja, saya bisa mendorong komit "dummy" dengan perubahan sepele, yang mungkin merupakan jawaban paling sederhana --- tapi saya bertanya-tanya apakah ada perintah heroku yang akan membiarkan saya langsung mengkompilasi ulang siput.

Terima kasih!

Nathan
sumber
1
Tidak ada di klien heroku CLI?
Matt Ball
Bukan jawaban langsung, tetapi selalu bijaksana untuk mendokumentasikan perubahan ketergantungan seperti mengandalkan fitur SAAS, dll. Saran saya adalah menambahkan entri ke CHANGELOG di suatu tempat yang menyebutkan Anda sekarang bergantung pada fitur ini, dan mendorong perubahan itu untuk memicu pembangunan kembali dari siput.
patcoll

Jawaban:

93

Kompilasi slug dipanggil dengan hook pre-recept git, jadi satu-satunya cara untuk mengkompilasi ulang adalah dengan menekan komit baru.

Untuk kelengkapan, lihat artikel ini di Heroku untuk kompiler siput . Ini membahas penggunaan kait pra-menerima untuk memohon proses kompilasi siput di bawah judul Kompilasi.

nmott
sumber
23
Terima kasih atas jawaban anda. Memang benar bahwa hook pre-accept git mengkompilasi siput. (lihat, misalnya: devcenter.heroku.com/articles/slug-compiler ). Itu tidak berarti bahwa heroku tidak (atau tidak bisa) menyediakan mekanisme alternatif untuk menjalankan kompilasi siput seperti perintah heroku CLI. Yang mengatakan, tidak ada yang menyebutkan perintah seperti itu, jadi saya menganggap jawaban Anda tepat, setidaknya untuk saat ini. Terima kasih!
Nathan
1
@Nathan Mungkin Anda bisa meminta dukungan Heroku cara untuk memicu kompilasi siput melalui Heroku Toolbelt? Jika mereka melakukannya, tambahkan jawaban lain!
culix
7
Sekarang ada solusinya. The heroku-repo add-on
Refael Ackermann
FYI bagi saya solusi ini tidak berfungsi ketika saya memiliki nilai ENV baru untuk pengaturan dalam file js yang akan dikompilasi ke dalam aplikasi Rails.js. Butuh spasi untuk file js dan dorongan untuk mendapatkan aset agar benar-benar dikompilasi ulang.
Josh Diehl
12
repo:rebuildtidak lagi menjadi perintah yang valid di plug-in, seperti yang dapat dilihat di sini: github.com/heroku/heroku-repo/commit/…
blindstuff
234

Solusi paling sederhana untuk saat ini adalah dengan menekan komit kosong .

git commit --allow-empty -m "empty commit"
git push heroku master
Brad Koch
sumber
53
Anda dapat melakukan ini dan menyimpan sejarah komit bersih dengan paksa-mendorong komit sebelumnya setelah itu: git reset HEAD~; git push -f heroku master. Mengeluarkan biaya waktu dari penyebaran Heroku lain, tapi bersihkan sejarah FTW.
Paul Annesley
2
Hanya untuk melengkapi ini alias di ~/.profiletambahkan Anda ini: alias heroku-rebuild="git reset HEAD~; git push -f heroku master"atau alias heroku-rebuild="git commit --allow-empty -m 'empty commit' && git push heroku master"jadi Anda cukup mengetikheroku-rebuild
unmultimedio
30

Pendekatan umum saya adalah melakukan:

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

Tidak yakin saya akan melakukan ini dalam produksi tanpa pasti, karena memang secara teknis menulis ulang komit terakhir tetapi seharusnya tidak menyebabkan masalah dalam teori. Ini sangat baik untuk ketika Anda menguji hal-hal dalam pementasan.

Sebagai bonus tambahan karena kebanyakan orang bermasalah menggunakan Vim untuk mengedit pesan komit SHIFT-ZZakan dengan cepat menyimpan dan keluar dari pesan komit untuk Anda tanpa membuat perubahan apa pun padanya.

Pada catatan terkait, saya agak kaget, Heroku masih tidak memiliki fitur ini. Saya sering melihat Heroku gagal digunakan karena masalah pada akhirnya.

Terima kasih kepada Michael Mior untuk ide yang digunakan -C HEADuntuk menghindari membuka editor.

Chris Nicola
sumber
2
Atau hanya gunakan git commit --amend -C HEADuntuk menghindari membuka editor sama sekali dan menjaga pesan komit tetap sama.
Michael Mior
Terima kasih @MichaelMior ini bekerja sangat baik untuk saya dan tidak mengacaukan sejarah git yang saya rasakan.
James Ward
Satu hal yang perlu diperhatikan di sini adalah jika Anda memiliki repo pusat yang berbeda (selain heroku). Jika demikian, ini akan menghasilkan penggabungan / duplikasi komit dalam riwayat lain kali Anda menarik jika Anda sudah mendorong komit terakhir.
Nick F
mengapa ini sangat anti pengguna?
Lucke
20

Heroku telah merilis plugin yang diminta: https://github.com/heroku/heroku-repo

Untuk menginstalnya:

$ heroku plugins:install heroku-repo

Untuk memaksa membangun kembali:

$ heroku repo:purge_cache -a appname
$ heroku repo:reset -a appname
$ git push heroku
Flimm
sumber
15

Perbarui: heroku repo: rekondisi telah dihapus .

Heroku memiliki Build API yang dapat Anda gunakan, lihat: Membangun dan Melepaskan Menggunakan API


Anda dapat menggunakan perintah repo: membangun kembali jika heroku-repo add-on.

heroku repo:rebuild -a appname

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

khamaileon
sumber
3
Hanya berkomentar di utas lainnya juga, tapi ada baiknya diulang di sini: Addon heroku-repo terlihat bagus, tapi setelah mencobanya saya tidak merekomendasikannya. Ada bug yang buruk: ia mengabaikan flag --app. Ini menyebabkan saya secara tidak sengaja membangun kembali lingkungan produksi kami, ketika saya bermaksud membangun kembali pementasan. Bug ini telah terbuka terhadap repo selama lebih dari satu tahun sekarang tanpa resolusi. Saya telah menghapus plugin ini.
jasoncrawford
6
Versi heroku-repo saat ini tidak memiliki sub
perintah bangun
Saya harus mengatur ulang repo jarak jauh karena perintah membangun kembali tidak berfungsi
vaibhav jain
Anda diperbarui dan Anda mengatakan itu berfungsi dengan "Build API" tapi saya tidak benar-benar mengerti cara kerjanya ... Ada bantuan? Apakah saya harus mengirim permintaan HTTP POST ke API untuk membangun kembali aplikasi saya? Yang mana? Ada token (alasan keamanan)?
Dam Fa
5

Ada plugin heroku untuk ini.

$ heroku plugins:install heroku-releases-retry
Installing plugin heroku-releases-retry... done
$ heroku releases:retry
Retrying v16 on ⬢ murmuring-lowlands-3398... done, v17
Matt Joiner
sumber
3
Ini akan mencoba kembali rilis setelah rilis gagal. Itu tidak akan mencoba kembali membangun gagal.
Jeremy
-3

Hapus cabang, lalu dorong kembali. Tidak perlu menggunakan plugin.

git push heroku :master
git push heroku master
Elliot Winkler
sumber
Akan menghasilkan "Dorong ditolak, tidak dapat menghapus cabang utama".
skalee
-15

git push --force harus bekerja :)

patcon
sumber
3
Hmm, saya mendapat "Semuanya terbaru".
Brad Koch