Sou um pouco novo no empacotador e nos arquivos que ele gera. Eu tenho uma cópia de um repositório Git do GitHub que está sendo contribuído por muitas pessoas, então fiquei surpreso ao descobrir que o bundler criou um arquivo que não existia no repositório e não estava na .gitignore
lista.
Como o bifurquei, sei que adicioná-lo ao repositório não quebrará nada no repositório principal, mas se eu fizer uma solicitação de recebimento, isso causará um problema?
Deve Gemfile.lock
ser incluído no repositório?
git
version-control
bundler
aarona
fonte
fonte
Respostas:
Supondo que você não esteja escrevendo um rubygem, o Gemfile.lock deve estar no seu repositório. É usado como um instantâneo de todas as gemas necessárias e suas dependências. Dessa forma, o empacotador não precisa recalcular todas as dependências de gemas cada vez que você implanta, etc.
Do comentário de cowboycoded abaixo:
Aqui está um bom artigo explicando o que é o arquivo de bloqueio.
fonte
O verdadeiro problema acontece quando você está trabalhando em um aplicativo Rails de código aberto que precisa ter um adaptador de banco de dados configurável. Estou desenvolvendo a filial do Rails 3 do Fat Free CRM. Minha preferência é o postgres, mas queremos que o banco de dados padrão seja mysql2.
Nesse caso,
Gemfile.lock
ainda é necessário fazer check-in com o conjunto padrão de gemas, mas preciso ignorar as alterações que fiz na máquina. Para fazer isso, eu corro:e para reverter:
Também é útil incluir algo como o seguinte código no seu
Gemfile
. Isso carrega a gema apropriada do adaptador de banco de dados, com base no seu database.yml.Não sei dizer se essa é uma prática recomendada estabelecida ou não, mas funciona bem para mim.
fonte
Meus colegas de trabalho e eu temos diferentes Gemfile.lock, porque usamos diferentes plataformas, janelas e mac, e nosso servidor é linux.
Decidimos remover o Gemfile.lock no repo e criar o Gemfile.lock.server no git repo, assim como database.yml. Antes de implementá-lo no servidor, copiamos Gemfile.lock.server para Gemfile.lock no servidor usando o gancho de implantação de cap
fonte
Concordando com r-dub, mantenha-o no controle de origem, mas para mim, o benefício real é este:
colaboração em ambientes idênticos (desconsiderando as coisas windohs e linux / mac). Antes do Gemfile.lock, o próximo cara a instalar o projeto podia ver todos os tipos de erros confusos, culpando a si mesmo, mas ele era apenas esse cara de sorte recebendo a próxima versão do super gem, quebrando as dependências existentes.
Pior, isso aconteceu nos servidores, recebendo versão não testada, a menos que seja disciplinado e instale a versão exata. O Gemfile.lock torna isso explícito e explicitamente informa que suas versões são diferentes.
Nota: lembre-se de agrupar itens, como: development e: test
fonte
Os documentos do Bundler também abordam esta questão:
ORIGINAL: http://gembundler.com/v1.3/rationale.html
EDIT: http://web.archive.org/web/20160309170442/http://bundler.io/v1.3/rationale.html
Consulte a seção "Verificando seu código no controle de versão":
fonte
Nenhum Gemfile.lock significa:
-> Sempre verifique o Gemfile.lock, faça o travis excluí-lo se quiser ser mais completo https://grosser.it/2015/08/14/check-in-your-gemfile-lock/
fonte
Um pouco atrasado para a festa, mas as respostas ainda me levaram tempo e leituras estrangeiras para entender esse problema. Então, quero resumir o que descobri sobre o Gemfile.lock.
Ao criar um aplicativo Rails, você está usando determinadas versões de gemas na sua máquina local. Se você deseja evitar erros no modo de produção e em outras ramificações, use esse arquivo Gemfile.lock em todos os lugares e peça ao bundler
bundle
para reconstruir gemas toda vez que mudar.Se você
Gemfile.lock
mudou na sua máquina de produção e o Git não permitegit pull
, você deve escrevergit reset --hard
para evitar essa alteração no arquivo e escrevergit pull
novamente.fonte