O que o Bundler faz
Um fio que o curso Rails CLI deixou aberto
O curso Rails CLI: rails new fechou a aula de setup com isto: "Gemfile e Gemfile.lock já existem quando o bin/setup roda bundle install. O lock registra as versões exatas resolvidas das gems. Como isso funciona, e como gerenciar gems de propósito, fica para Bundler e Gemfile." Este é esse curso.
Dois números que mostram o problema
$ bundle check
The Gemfile's dependencies are satisfied
$ bundle install
Bundle complete! 42 Gemfile dependencies, 160 gems now installed.
Os dois rodaram neste projeto. O Gemfile declara 42 gems pelo nome, e 160 são instaladas. A diferença existe porque quase toda gem depende de outras gems. Só o rails traz actionpack, activerecord, activesupport e mais, cada uma com seus próprios requisitos de versão, e todas precisam concordar.
Os dois números mudam sempre que o Gemfile muda, então os seus vão ser outros. O formato se mantém: o segundo número é bem maior que o primeiro, e a diferença é tudo o que o Bundler resolveu sem ninguém pedir.
Resolver as restrições
O trabalho do Bundler é achar uma versão de cada uma dessas gems que satisfaça todas as restrições ao mesmo tempo: o Gemfile deste projeto e os requisitos de cada gem. Escolher uma versão de uma gem que conflite com o que outra precisa quebraria a app ao carregar. Então o Bundler resolve as restrições em vez de instalar o que for mais novo.
Travar a resposta
Quando o Bundler acha uma resposta, grava cada gem e sua versão exata no Gemfile.lock. Esse arquivo garante que as mesmas versões sejam usadas de novo, em qualquer máquina, em vez de o Bundler resolver do zero e talvez chegar a outro resultado. A aula 3 trata dele.
O que este curso cobre
Gemfile: o que o desenvolvedor declara, e o que as restrições~>e>=significam.Gemfile.lock: o retrato resolvido que o Bundler grava e ninguém edita à mão.bundle install: o que ele faz quando oGemfile.lockjá bate, e quando não bate.bundle exec: por que um script Ruby comum precisa dele e obin/railsnão.- Conferir essas afirmações no
Gemfiledeste projeto. - Um fechamento, e o que vem depois.
No fim, o passo bundle install do bin/setup vira um passo que você sabe explicar.
Continue com a aula 2
O Gemfile: declarando do que você depende
Como o Gemfile declara gems, o que as restrições ~> e >= permitem e como os grupos limitam ambientes.
Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.