Skip to content
Latchkey

O Que É o Bundler? O Gerenciador de Dependências do Ruby Explicado

O Bundler é o gerenciador de dependências do Ruby: ele lê um Gemfile, resolve um conjunto consistente de versões de gems e as trava para que todo ambiente seja idêntico.

O Bundler resolveu o "inferno de dependências" do Ruby ao resolver um único conjunto consistente de versões de gems para um projeto e registrá-las em um lockfile. Ele funciona em conjunto com o RubyGems (que instala gems individuais) para dar aos projetos Ruby conjuntos de dependências reprodutíveis.

O que é o Bundler

O Bundler é um gerenciador de dependências para Ruby. Você lista as gems de que seu projeto precisa em um Gemfile, e o Bundler resolve versões mutuamente compatíveis, as instala e registra o conjunto resolvido exato no Gemfile.lock. O comando "bundle exec" executa ferramentas usando exatamente essas versões.

Como funciona

O Bundler lê o Gemfile, resolve um grafo de dependências compatível e escreve o Gemfile.lock com as versões exatas. "bundle install" as instala; fazer commit do Gemfile.lock significa que toda máquina e todo runner de CI instalam o conjunto idêntico. "bundle exec rspec" executa um comando no contexto dessas gems resolvidas, evitando conflitos de versão com as gems do sistema.

Um exemplo de uso

Declare gems, instale e execute dentro do bundle.

Gemfile plus Bundler commands
# Gemfile
source "https://rubygems.org"
gem "rails", "~> 7.1"

# install and run a tool with the locked versions
bundle install
bundle exec rspec

Papel em CI/CD

Em pipelines, "bundle install" restaura o conjunto de gems travado e "bundle exec" executa testes e tarefas com as versões corretas. Definir "bundle config set frozen true" faz a CI falhar caso o lockfile mudasse, detectando drift. Fazer cache das gems instaladas (o caminho vendor/bundle) entre execuções evita reinstalar gems que não mudaram e acelera os jobs.

Alternativas

O RubyGems sozinho instala gems, mas não resolve um conjunto consistente para o projeto inteiro, e é por isso que o Bundler existe em cima dele. Não há um concorrente mainstream do Bundler no mundo Ruby; ele é, na prática, o padrão para o gerenciamento de dependências de aplicações.

Principais conclusões

  • O Bundler resolve e trava um conjunto consistente de versões de gems do Ruby.
  • O Gemfile declara as dependências; o Gemfile.lock fixa o conjunto resolvido.
  • Use instalações frozen e gem caching em CI para builds reprodutíveis e rápidos.

Guias relacionados