O que o Bundler faz

Prévia grátis 2 min de leitura

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

  1. Gemfile: o que o desenvolvedor declara, e o que as restrições ~> e >= significam.
  2. Gemfile.lock: o retrato resolvido que o Bundler grava e ninguém edita à mão.
  3. bundle install: o que ele faz quando o Gemfile.lock já bate, e quando não bate.
  4. bundle exec: por que um script Ruby comum precisa dele e o bin/rails não.
  5. Conferir essas afirmações no Gemfile deste projeto.
  6. Um fechamento, e o que vem depois.

No fim, o passo bundle install do bin/setup vira um passo que você sabe explicar.

Aula 1 de 7 · grátis

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.

Digite para buscar...