Eu tenho um projeto que usa o Serve e é controlado por versão usando o Git. Servir cria uma output
pasta com arquivos estáticos que eu quero implantar no Heroku.
Não quero implantar o projeto Serve, pois a pilha Heroku Cedar não parece gostar muito dele, mas o mais importante é que eu quero aproveitar o excelente suporte do Heroku para sites estáticos.
Existe uma maneira de implantar uma subpasta em um git remote? Devo criar um repositório Git na output
pasta (isso parece errado) e enviá-lo para o Heroku?
Respostas:
Existe uma maneira ainda mais fácil via git-subtree . Supondo que você queira enviar a saída da pasta como raiz para o Heroku, você pode:
Atualmente, parece que a subárvore git está sendo incluída no git-core, mas não sei se essa versão do git-core já foi lançada.
fonte
--force
, usegit push heroku `git subtree split --prefix output master`:master --force
. Consulte stackoverflow.com/a/15623469/2066546 .git subtree push --prefix output heroku +refs/tags/v1.0.0:refs/heads/master
. Mas isso não funciona e volta com+refs/tags/v1.0.0:refs/heads/master does not look like a ref
. Preciso desse tipo de funcionalidade para poder voltar a tags específicas mais tarde. Qual é a maneira correta de fazer isso?output
pasta que estava presente apenas na minhadevelop
ramificação para aheroku master
ramificação sem a necessidade de especificardevelop:master
, portanto, aparentemente, ela é direcionada para a ramificação de destino especificada na ramificação que está sendo registrada no momento.Eu tive uma questão semelhante. No meu caso, nunca foi um problema afastar tudo no repositório heroku e substituí-lo pelo que estiver no meu subdiretório. Se este for o seu caso, você pode usar o seguinte script bash. Basta colocá-lo no diretório do aplicativo Rails.
Tenho certeza de que há muitas maneiras de melhorar isso - fique à vontade para me dizer como!
fonte
+1
Obrigado. Essa solução funciona muito bem se você não se importa com os logs do git no Heroku. É possível ajustar o script acima, caso haja algumas pastas que você deseja ignorar, dentro do subcaminho do aplicativo a ser implantado. Por exemplo, eu não queriaspec
pasta no heroku. Exemplo Gist+1
mas você pode simplificar por não puxar e fundindo-se mestre heroku e em vez disso simplesmentegit push --force heroku master
Comecei com o que John Berryman colocou, mas na verdade pode ser mais simples se você não se importar com a história do heroku git.
Acho que oficial
git subtree
é a melhor resposta, mas tive problemas para fazer com que a subárvore funcione no meu mac.fonte
Depois de um mês longo e difícil, tentando coisas diferentes e sendo mordido toda vez que percebi,
só porque o Heroku usa um repositório git como um mecanismo de implantação, você não deve tratá-lo como um repositório git
poderia ter sido rsync também, eles foram para o git, não se distraiam por causa disso
se você faz isso, você se abre para todo tipo de mágoa. Todas as soluções mencionadas falham miseravelmente em algum lugar:
bundle deploy
- falhar, é necessário empacotar atualizações sempre:path
+bundle deploy
-, a equipe de desenvolvimento considera a:path
opção como "você não está usando o Bundler com esta opção de gema" para que ele não seja agregado para produção/vendor
link simbólico no desenvolvimento e copiar os arquivos para produçãoA solução
O aplicativo em questão possui 4 projetos no git root:
Todos os projetos têm um
vendor/common
link simbólico para a raiz docommon
mecanismo. Ao compilar o código-fonte para implantação no heroku, precisamos remover o link simbólico e o rsync para que ele esteja fisicamente na pasta do fornecedor de cada host separado.Funciona muito bem na natureza com problemas mínimos (não?) Há 6 meses
Aqui está o script https://gist.github.com/bbozo/fafa2bbbf8c7b12d923f
Atualização 1
@AdamBuczynski, nunca é tão direto.
Em primeiro lugar, você sempre terá pelo menos um ambiente de produção e teste - e um monte de clusters específicos de funções, na pior das hipóteses - de repente 1 pasta precisa mapear para n projetos heroku como um requisito bastante básico e tudo precisa ser organizado de alguma forma para que o script "sabe" qual fonte você deseja implantar onde,
Segundo, você desejará compartilhar código entre projetos - agora vem a
sync_common
parte, os shennanigans com links simbólicos no desenvolvimento sendo substituídos pelo código rsynced real no Heroku porque o Heroku requer uma certa estrutura de pastas e bundler e rubygems realmente tornam as coisas muito feias muito mal se você deseja extrair os threads comuns em uma gemaTerceiro, você desejará conectar o CI e isso mudará um pouco a forma como as subpastas e o repositório Git precisam ser organizados; no final, no caso de uso mais simples possível, você acaba com a essência mencionada acima.
Em outros projetos, eu preciso conectar as compilações Java; ao vender software para vários clientes, você precisará filtrar os módulos que serão instalados, dependendo dos requisitos de instalação e outros enfeites,
Eu realmente deveria considerar explorar coisas em um Rakefile ou algo assim e fazer tudo dessa maneira ...
fonte