Ricompila la lumaca Heroku senza premere o modificare la configurazione


147

Mi chiedo se c'è un modo per forzare Heroku a ricompilare la lumaca senza spingere nuovi commit e / o aggiornare le variabili di configurazione.

Perché dovrei voler fare questo ?:

Sto usando lo stack Cedar su Heroku per un'app Rails 3.2 e sto riscontrando problemi con il rake assets:precompilefallimento dell'attività (solo durante la compilazione --- in seguito funziona benissimo con a heroku run). Sospetto fortemente che ciò sia dovuto al fatto che alcune variabili di ambiente non sono disponibili durante il tempo di compilazione delle lumache e penso che la heroku labs:enable user_env_compilefunzione sperimentale risolverà questo problema.

Tuttavia, con la user_env_compilefunzione attivata, le modifiche alla configurazione non attivano una ricompilazione della lumaca e il mio codice non è cambiato, quindi non ho nuovi commit da inviare.

Certo, potrei spingere un commit "fittizio" con un cambiamento banale, che è probabilmente la risposta più semplice --- ma mi chiedo se c'è un comando heroku che mi permetta di ricompilare direttamente la lumaca.

Grazie!


1
Niente nel client CLI di heroku?
Matt Ball,

Non è una risposta diretta, ma è sempre consigliabile documentare i cambiamenti di dipendenza come fare affidamento su funzionalità SAAS, ecc. Il mio consiglio è di aggiungere una voce a un CHANGELOG da qualche parte menzionandoti ora fare affidamento su questa funzionalità e spingere tale modifica per attivare una ricostruzione del lumaca.
patcoll,

Risposte:


93

La compilazione di slug viene invocata con un hook pre-recieve di git, quindi l'unico modo per ricompilare è spingere un nuovo commit.

Per completezza vedi questo articolo su Heroku per il compilatore di lumache . Ha discusso dell'uso del hook pre-recieve per invocare il processo di compilazione delle lumache sotto l'intestazione Compilation.


23
Grazie per la tua risposta. È vero che un hook di pre-ricezione git compila la lumaca. (vedi ad esempio: devcenter.heroku.com/articles/slug-compiler ). Ciò non significa necessariamente che heroku non (o non potrebbe) fornire un meccanismo alternativo per invocare la compilazione di lumache come un comando CLI di heroku. Detto questo, nessuno ha menzionato un tale comando, quindi presumo che la tua risposta sia corretta, almeno per ora. Grazie!
Nathan,

1
@Nathan Forse potresti chiedere al supporto di Heroku un modo per attivare la compilazione di lumache tramite la cintura degli strumenti di Heroku? Se ci provano, aggiungi un'altra risposta!
Culix,

7
Adesso c'è una soluzione. Il componente aggiuntivo heroku-repo
Refael Ackermann,

Cordiali saluti per me questa soluzione non ha funzionato quando avevo un nuovo valore ENV per un'impostazione in un file js che viene compilato in Rails application.js. Ci voleva uno spazio per il file js e una spinta per far ricompilare la risorsa.
Josh Diehl,

12
repo:rebuildnon è più un comando valido nel plug-in, come si può vedere qui: github.com/heroku/heroku-repo/commit/…
blindstuff

234

La soluzione più semplice per ora è inviare un commit vuoto .

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

53
Si può fare questo e mantenere un commit storia pulita con la forza-spingendo il commit precedente in seguito: git reset HEAD~; git push -f heroku master. Supporta il costo in tempo di un'altra distribuzione Heroku, ma FTW cronologia pulita.
Paul Annesley,

2
Solo per completare questo un alias nel tuo ~/.profileaggiungere questo: alias heroku-rebuild="git reset HEAD~; git push -f heroku master"oalias heroku-rebuild="git commit --allow-empty -m 'empty commit' && git push heroku master" così puoi semplicemente digitareheroku-rebuild
unmultimedio

30

Il mio approccio generale è di fare:

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

Non sono sicuro che lo farei in produzione senza esserne certo, poiché riscrive tecnicamente l'ultimo commit ma non dovrebbe causare problemi in teoria. Va benissimo anche quando stai testando le cose in scena.

Come bonus aggiuntivo poiché la maggior parte delle persone ha problemi a utilizzare Vim per modificare i messaggi di commit SHIFT-ZZ, salverà e uscirà rapidamente il messaggio di commit senza apportare modifiche.

Su una nota correlata sono leggermente scioccato. Heroku non ha ancora questa funzione. Ho visto spesso Heroku non riuscire a schierarsi a causa di problemi alla fine.

Grazie a Michael Mior per l'idea di utilizzare -C HEADper evitare di aprire un editor.


2
Oppure usa semplicemente git commit --amend -C HEADper evitare di aprire un editor e mantenere lo stesso messaggio di commit.
Michael Mior,

Grazie @MichaelMior questo ha funzionato benissimo per me e non ha fatto casino con la mia storia di git percepita.
James Ward,

Una cosa con cui fare attenzione è se hai un repository centrale diverso (oltre a heroku). In tal caso, ciò comporterà un'unione / duplicazione del commit nella cronologia la prossima volta che esegui il pull se hai già eliminato l'ultimo commit.
Nick F,

perché è così antiutente?
Fortuna,

20

Heroku ha rilasciato un plug-in che viene richiesto: https://github.com/heroku/heroku-repo

Per installarlo:

$ heroku plugins:install heroku-repo

Per forzare una ricostruzione:

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

15

Aggiornamento: repository heroku: la ricostruzione è stata rimossa .

Heroku ha un'API Build che puoi usare, vedi: Creazione e rilascio usando l'API


È possibile utilizzare il comando repo: rebuild se il componente aggiuntivo heroku-repo .

heroku repo:rebuild -a appname

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


3
Ho appena commentato anche l'altro thread, ma vale la pena ripeterlo qui: l'addon heroku-repo sembra carino, ma dopo averlo provato non lo consiglio. Esiste un bug errato: ignora il flag --app. Ciò mi ha causato la ricostruzione accidentale del nostro ambiente di produzione, quando intendevo ricostruire la stadiazione. Questo bug è stato aperto contro il repository da oltre un anno ormai senza soluzione. Ho disinstallato questo plugin.
Jasoncrawford,

6
La versione attuale di heroku-repo non ha il sottocomando ricostruzione
Mike Slinn,

Devo ripristinare il repository remoto poiché il comando di ricostruzione non funziona
vaibhav jain

Hai aggiornato e dici che funziona con "Build API" ma non capisco davvero come funziona ... Qualche aiuto? Devo inviare una richiesta POST HTTP all'API per ricostruire la mia app? Su quale? C'è un token (motivo di sicurezza)?
Dam Fa


5

C'è un plugin heroku per questo.

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

3
Ciò riproverà le versioni dopo una versione non riuscita. Non riproverà una build fallita.
Jeremy,

-3

Rimuovere il ramo, quindi spingerlo di nuovo. Non è necessario utilizzare un plug-in.

git push heroku :master
git push heroku master

Verrà visualizzato "Push rifiutato, impossibile eliminare il ramo principale".
Skalee,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.