Heroku slugını push veya yapılandırma değişikliği yapmadan yeniden derleyin


148

Heroku'yu yeni işlemlere zorlamadan ve / veya yapılandırma değişkenlerini güncellemeden slug'ı yeniden derlemeye zorlamanın bir yolu olup olmadığını merak ediyorum.

Bunu neden yapmak isteyeyim ?:

Bir Rails 3.2 uygulaması için Heroku'daki Cedar yığınını kullanıyorum ve rake assets:precompilegörevin başarısız olmasıyla ilgili sorunlar yaşıyorum (yalnızca derleme sırasında - daha sonra a ile iyi çalışıyor heroku run). Bunun, bilgi derleme sırasında bazı ortam değişkenlerinin kullanılamamasından kaynaklandığından çok şüpheleniyorum ve heroku labs:enable user_env_compiledeneysel özelliğin bunu çözeceğini düşünüyorum .

Ancak, user_env_compileözellik açıkken, yapılandırma değişiklikleri bilgi bilgisinin yeniden derlenmesini tetiklemez ve kodum değişmedi, bu nedenle aktaracağım yeni taahhütlerim yok.

Tabii ki, önemsiz bir değişiklikle "sahte" bir işlemi zorlayabilirim, ki bu muhtemelen en basit cevaptır - ama slug'ı doğrudan yeniden derlememe izin verecek bir heroku komutu olup olmadığını merak ediyorum.

Teşekkürler!


1
Heroku CLI istemcisinde hiçbir şey yok mu?
Matt Ball

Doğrudan bir yanıt değil, ancak SAAS özelliklerine vb. Güvenmek gibi bağımlılık değişikliklerini belgelemek her zaman akıllıca olacaktır. Tavsiyem, bir yere CHANGELOG'a bir giriş eklemek ve şimdi bu özelliğe güvendiğinizi belirtmek ve bu değişikliğin yeniden oluşturulmasını tetiklemektir. sümüklüböcek.
patcoll

Yanıtlar:


94

Bilgi derlemesi bir git pre-recieve kancası ile çağrılır, bu nedenle yeniden derlemenin tek yolu yeni bir commit yapmaktır.

Tamlık için slug derleyicisi için Heroku hakkındaki bu makaleye bakın . Derleme başlığı altındaki bilgi derleme sürecini çağırmak için ön alma kancasının kullanımını tartıştı.


24
Cevabınız için teşekkürler. Git pre-retriever kancasının slug'ı derlediği doğrudur. (Örneğin: devcenter.heroku.com/articles/slug-compiler'a bakın ). Bu, heroku'nun bir heroku CLI komutu gibi bilgi derlemesini çağırmak için alternatif bir mekanizma sağlamadığı (veya sağlayamayacağı) anlamına gelmez. Bununla birlikte, kimse böyle bir emirden bahsetmedi, bu yüzden cevabınızın en azından şimdilik yerinde olduğunu varsayıyorum. Teşekkürler!
Nathan

1
@Nathan Belki Heroku desteğinden, Heroku Araç Kemeri aracılığıyla bilgi toplama işlemini tetiklemenin bir yolunu sorabilirsiniz? Kabul ederlerse, başka bir cevap ekleyin!
culix

Bilginize, Rails application.js içinde derlenen bir js dosyasındaki bir ayar için yeni bir ENV değerine sahip olduğumda bu çözüm işe yaramadı. Js dosyasına bir alan ayırmak ve varlığın gerçekten yeniden derlenmesini sağlamak için bir itme gerekiyordu.
Josh Diehl

Heroku-Repo eklenti güzel görünüyor ama bunu denedikten sonra ben do not ederim. Kötü bir hata var: --app bayrağını yok sayıyor. Bu, aşamalandırmayı yeniden inşa etmek istediğimde yanlışlıkla üretim ortamımızı yeniden inşa etmeme neden oldu. Bu hata, repo için bir yıldan uzun bir süredir çözülmeden açık durumda. Bu eklentiyi kaldırdım.
jasoncrawford

13
repo:rebuildartık eklentide geçerli bir komut değil, burada görülebileceği gibi: github.com/heroku/heroku-repo/commit/…
blindstuff

239

Şimdilik en basit çözüm, boş bir kaydetmeyi zorlamaktır .

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

54
Bunu yapmak ve önceki sonradan işlemeye kuvvet-iterek temiz bir taahhüt geçmişini tutabilir: git reset HEAD~; git push -f heroku master. Başka bir Heroku dağıtımının zaman maliyetine neden olur, ancak FTW'nin geçmişini temizler.
Paul Annesley

2
Sadece bunu tamamlamak için bunu ~/.profileekleyin: alias heroku-rebuild="git reset HEAD~; git push -f heroku master"ya alias heroku-rebuild="git commit --allow-empty -m 'empty commit' && git push heroku master"da basitçe yazabilirsinizheroku-rebuild
unmultimedio

30

Genel yaklaşımım şudur:

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

Son kaydı teknik olarak yeniden yazdığından emin olmadan üretimde bunu yapacağımdan emin değilim, ancak teoride herhangi bir soruna neden olmamalıdır. Yine de bir şeyleri sahnelemede test ettiğiniz zamanlar için mükemmel.

Çoğu kişi commit mesajlarını düzenlemek için Vim kullanmakta sorun yaşadığı için ek bir bonus olarak SHIFT-ZZ , taahhüt mesajında ​​herhangi bir değişiklik yapmadan hızlı bir şekilde kaydedip çıkar.

Bununla ilgili olarak biraz şok oldum Heroku hala bu özelliğe sahip değil. Sık sık Heroku'nun kendi tarafındaki sorunlar nedeniyle konuşlanmadığını gördüm.

-C HEADBir editörün açılmasını önlemek için kullanacağı fikir için Michael Mior'a teşekkürler .


2
Ya da sadece git commit --amend -C HEADbir düzenleyici açmamak ve commit mesajını aynı tutmak için kullanın.
Michael Mior

Teşekkürler @MichaelMior, bu benim için harika çalıştı ve algılanan git geçmişimle uğraşmadı.
James Ward

Burada dikkat etmeniz gereken bir nokta, farklı bir merkezi deponuzun (heroku'ya ek olarak) olup olmadığıdır. Eğer öyleyse, bu, son commit'i zaten ittiyseniz, bir dahaki sefere çektiğinizde kayıtların geçmişte birleştirilmesi / kopyalanmasıyla sonuçlanacaktır.
Nick F

bu neden bu kadar anti kullanıcı?
Lucke

20

Heroku, sorulan bir eklenti yayınladı: https://github.com/heroku/heroku-repo

Yüklemek için:

$ heroku plugins:install heroku-repo

Yeniden oluşturmaya zorlamak için:

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

15

Güncelleme: heroku repo: rebuild kaldırıldı .

Heroku'da kullanabileceğiniz bir Yapı API'si vardır, bkz: API Kullanarak Oluşturma ve Yayınlama


Heroku-repo eklentisi varsa repo: rebuild komutunu kullanabilirsiniz .

heroku repo:rebuild -a appname

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


3
Tıpkı diğer iş parçacığı üzerinde yorumladı, ama onun değerinde burada tekrar: Heroku-repo eklenti görünüyor bir güzel, ama bunu denedikten sonra ben do not ederim. Kötü bir hata var: --app bayrağını yok sayıyor. Bu, aşamalandırmayı yeniden inşa etmek istediğimde yanlışlıkla üretim ortamımızı yeniden inşa etmeme neden oldu. Bu hata, repoya karşı bir yıldan uzun bir süredir çözülmeden açık durumda. Bu eklentiyi kaldırdım.
jasoncrawford

6
Heroku-repo'nun şu anki sürümünde yeniden inşa alt
komutu bulunmuyor

Yeniden oluşturma komutu çalışmadığı için uzak depoyu sıfırlamam gerekiyor
vaibhav jain

Güncellediniz ve "Build API" ile çalıştığını söylüyorsunuz, ancak nasıl çalıştığını gerçekten anlamıyorum ... Herhangi bir yardım? Uygulamamı yeniden oluşturmak için API'ye HTTP POST isteği göndermem gerekir mi? Hangisi? Bir belirteç var mı (güvenlik nedeni)?
Dam Fa


5

Bunun için bir heroku eklentisi var .

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

3
Bu, başarısız bir sürümden sonra sürümleri yeniden deneyecek. Başarısız bir yapıyı yeniden denemeyecektir.
Jeremy

-3

Şubeyi çıkarın, ardından yeniden itin. Eklenti kullanmaya gerek yok.

git push heroku :master
git push heroku master

"İtme reddedildi, ana dal silinemez" ile sonuçlanacaktır.
skalee
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.