Recompile a lesma Heroku sem empurrar ou alterar a configuração

147

Eu estou querendo saber se existe uma maneira de forçar o Heroku a recompilar a lesma sem forçar novas confirmações e / ou atualizar as variáveis ​​de configuração.

Por que eu gostaria de fazer isso ?:

Estou usando a pilha Cedar no Heroku para um aplicativo Rails 3.2 e estou tendo problemas com a rake assets:precompiletarefa falhando (apenas durante a compilação - mais tarde, funciona bem com a heroku run). Suspeito que isso ocorra devido ao fato de determinadas variáveis ​​de ambiente não estarem disponíveis durante o tempo de compilação do slug, e acho que o heroku labs:enable user_env_compilerecurso experimental resolverá isso.

No entanto, com o user_env_compilerecurso ativado, as alterações de configuração não acionam uma recompilação do slug, e meu código não foi alterado, portanto, não tenho nenhum novo commit a ser enviado.

Claro, eu poderia enviar um commit "fictício" com uma alteração trivial, que provavelmente é a resposta mais simples - mas estou me perguntando se existe um comando heroku que me permita recompilar diretamente a lesma.

Obrigado!

Nathan
fonte
1
Nada no cliente CLI heroku?
Matt Bola
Não é uma resposta direta, mas é sempre aconselhável documentar alterações de dependência, como confiar nos recursos do SAAS, etc. lesma.
Patcoll 15/05

Respostas:

93

A compilação do slug é chamada com um gancho de pré-recebimento do git, portanto, a única maneira de recompilar é enviar um novo commit.

Para detalhes, consulte este artigo no Heroku para o compilador slug . Ele discutiu o uso do gancho de pré-recebimento para chamar o processo de compilação de lesmas sob o cabeçalho Compilação.

nmott
fonte
23
Obrigado pela sua resposta. É verdade que um gancho de pré-recebimento do git compila a lesma. (consulte, por exemplo: devcenter.heroku.com/articles/slug-compiler ). Isso não significa necessariamente que o heroku não fornece (ou não pôde) fornecer um mecanismo alternativo para chamar a compilação de slug, como um comando da CLI do heroku. Dito isto, ninguém mencionou tal comando, então presumo que sua resposta seja imediata, pelo menos por enquanto. Obrigado!
Nathan
1
@ Nathan Talvez você possa pedir ao suporte da Heroku uma maneira de ativar a compilação de lesmas através do cinto de ferramentas Heroku? Se eles optarem por isso, adicione outra resposta!
Culix 28/08
7
Agora há uma solução. O heroku-repo add-on
Refael Ackermann
FYI para mim, essa solução não funcionou quando eu tinha um novo valor ENV para uma configuração em um arquivo js que é compilado no Rails application.js. Foi necessário comprometer um espaço no arquivo js e um empurrão para que o recurso realmente recompile.
Josh Diehl
12
repo:rebuildnão é mais um comando válido no plug-in, como pode ser visto aqui: github.com/heroku/heroku-repo/commit/…
blindstuff
234

A solução mais simples por enquanto é enviar uma confirmação vazia .

git commit --allow-empty -m "empty commit"
git push heroku master
Brad Koch
fonte
53
Você pode fazer isso e manter um histórico cometem limpo by-empurrando vigor a submissão anterior depois: git reset HEAD~; git push -f heroku master. Incorre no custo de tempo de outra implantação do Heroku, mas no histórico limpo do FTW.
Paul Annesley
2
Apenas para complementar este alias no seu ~/.profileadd isto: alias heroku-rebuild="git reset HEAD~; git push -f heroku master"ou alias heroku-rebuild="git commit --allow-empty -m 'empty commit' && git push heroku master"então você pode simplesmente digitarheroku-rebuild
unmultimedio 1/16/16
30

Minha abordagem geral é fazer:

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

Não tenho certeza se eu faria isso na produção sem ter certeza, pois tecnicamente reescreve o último commit, mas não deve causar problemas na teoria. É perfeitamente bom quando você está testando coisas na preparação.

Como um bônus adicional, já que a maioria das pessoas tem problemas ao usar o Vim para editar mensagens de confirmação SHIFT-ZZsalvar e sair rapidamente da mensagem de confirmação para você sem fazer nenhuma alteração.

Em uma nota relacionada, estou levemente chocado que o Heroku ainda não possui esse recurso. Eu sempre vi o Heroku falhar ao implantar devido a problemas.

Agradecemos a Michael Mior pela idéia de usar -C HEADpara evitar a abertura de um editor.

Chris Nicola
fonte
2
Ou use apenas git commit --amend -C HEADpara evitar a abertura de um editor e manter a mensagem de confirmação igual.
Michael Mior 22/01
Obrigado @MichaelMior, isso funcionou muito bem para mim e não mexeu com a minha história de git percebida.
James Ward
Uma coisa a ter cuidado aqui é se você tiver um repositório central diferente (além do heroku). Nesse caso, isso resultará em uma mesclagem / duplicação do commit no histórico da próxima vez que você puxar, se você já empurrou o último commit.
Nick F
por que isso é tão anti-usuário?
Lucke 18/04
20

Heroku lançou um plugin que é perguntado: https://github.com/heroku/heroku-repo

Para instalá-lo:

$ heroku plugins:install heroku-repo

Para forçar uma reconstrução:

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

Atualização: repo heroku: reconstruir foi removido .

O Heroku possui uma API de construção que você pode usar, consulte: Construindo e liberando usando a API


Você pode usar o comando repo: rebuild se o complemento heroku-repo .

heroku repo:rebuild -a appname

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

khamaileon
fonte
3
Apenas comentei no outro tópico também, mas vale a pena repetir aqui: O addon heroku-repo parece bom, mas depois de experimentar, eu não o recomendo. Há um bug incorreto: ele ignora o sinalizador --app. Isso me levou a reconstruir acidentalmente nosso ambiente de produção, quando pretendia reconstruir a preparação. Este bug está aberto contra o repositório há mais de um ano, sem resolução. Eu desinstalei este plugin.
Jasoncrawford
6
A versão atual do heroku-repo não possui o subcomando reconstruir
Mike Slinn
Eu tenho que repor o repo remoto como o comando reconstruir não está funcionando
jain vaibhav
Você atualizou e diz que funciona com a "Build API", mas eu realmente não entendo como funciona ... Alguma ajuda? Preciso enviar uma solicitação HTTP POST para a API para reconstruir meu aplicativo? Em que ? Existe um token (motivo de segurança)?
Dam Fa
5

Existe um plugin heroku para isso.

$ 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
fonte
3
Isso tentará novamente as liberações após uma falha na liberação. Ele não tentará novamente uma compilação com falha.
Jeremy
-3

Remova a ramificação e empurre-a novamente. Não há necessidade de usar um plugin.

git push heroku :master
git push heroku master
Elliot Winkler
fonte
Resultará em "Push rejeitado, não é possível excluir a ramificação principal".
skalee
-15

git push --force Deveria trabalhar :)

patcon
fonte
3
Hmm, eu recebo um "Tudo atualizado".
22812 Brad Koch