pode empacotador ser usado em implantações rsyn
Pode implantar um aplicativo Rails3 usando o Gemfile do Bundler SEM executarbundle install
... ou seja, apenas copiando um diretório do projeto rails para o diretório apropriado no Apache / Passenge
Então, temos um ambiente legado que foi projetado para projetos internos durante o período Ruby1.8.6 / Rails2 e depende da cópia do diretório local do rails para uma montagem de rede no Apache / Passenger. Embora esse modelo de implantação tenha funcionado bem no Rails2 (com gemas congeladas etc.), ele quebra de muitas maneiras dolorosas no Rails3 com Bundle
Especificamente, estou vendo erros de dependência de gemas para gems em: test e: groups de desenvolvimento, mesmo ao implantar em: produção. Eu achei a seguinte postagem SO útil no começo:
bundler tentando instalar incorretamente as gemas do grupo "development" e "test" na produçãoEntão eu executeibundle install --without test development
no meu local e tentei copiar manualmente .bundle / config do meu diretório para o diretório de rede, mas isso não funcionou. O Bundler ainda tentou carregar as gemas excluídas.
Isso é doloroso para nós, porque não temos privilégios de administrador para instalar gemas nesses servidores (ou seja, nunca é permitido executarbundle install
em qualquer forma). Da mesma forma, os administradores não querem se preocupar em implantar nossos aplicativos a cada 5 minutos, já que este é um site de prototipagem interno e não um site de produção externo. Eles também não querem correrbundle install
porque eles querem um controle rígido de quais gemas são implantadas em todos os aplicativos - por exemplo, alguns aplicativos ainda são baseados no Rails2 e ainda não usam o Bundler; portanto, eles podem quebrar se a gema errada estiver instalad
Existe alguma maneira de usar o Bundler de maneira passiva / rsync ou devemos redesenhar nosso ambiente para permitir que os desenvolvedores executembundle install
via capistrano ou algo assim?
Socorro
Obrigado
ATUALIZAR 18/01/2012: Depois de investigar um pouco mais o motivo dos erros: test e: development group, eu descoberto que o Phusion Passenger realmente executaBundle.setup()
antes que o aplicativo Rails tenha a chance de entrar emboot.rb
. Sem argumentos,setup()
verifica todas as dependências de gemas, o que significa que, se não encontrar uma gema no servidor, ela explodirá no Passenger antes mesmo de ter a chance de carregar o Rail
Este 'bug' específico só pode acontecer se você implantar via rsync ou copiar em vez de executarbundle install --without test:development
no servidor de destino. A maioria dos aplicativos Rails3 é implantada com o Capistrano, o que faz essa etapa para você e, como tal, nunca encontra esse caso específic
Então, receio que a única maneira de fazer com que os 'grupos' funcionem corretamente no seu arquivo gem é usarbundle install
como pretendido. Isso significa que devemos mudar nosso processo de implantação!