Breve explicação: o rbenv funciona conectando-se ao seu ambiente PATH
. O conceito é simples, mas o diabo está nos detalhes; colher completa abaixo.
Primeiro, rbenv cria calços para todos os comandos ( ruby
, irb
, rake
, gem
e assim por diante) em todas as suas versões instaladas do Ruby. Esse processo é chamado de rehashing . Toda vez que você instalar uma nova versão do Ruby ou instalar uma jóia que fornece um comando, execute rbenv rehash
para garantir que quaisquer novos comandos sejam shimmed.
Esses shims residem em um único diretório ( ~/.rbenv/shims
por padrão). Para usar o rbenv, você só precisa adicionar o diretório shims na frente do seu PATH
:
export PATH="$HOME/.rbenv/shims:$PATH"
Então, sempre que você executar a ruby
partir da linha de comando ou executar um script cujo shebang lê #!/usr/bin/env ruby
, seu sistema operacional o localizará ~/.rbenv/shims/ruby
primeiro e o executará em vez de qualquer outro ruby
executável que você possa ter instalado.
Cada shim é um pequeno script do Bash que, por sua vez, é executado rbenv exec
. Assim, com rbenv em seu caminho, irb
é equivalente a rbenv exec irb
, e ruby -e "puts 42"
é equivalente a rbenv exec ruby -e "puts 42"
.
O rbenv exec
comando descobre qual versão do Ruby você deseja usar e, em seguida, executa o comando correspondente para essa versão. Aqui está como:
- Se o
RBENV_VERSION
variável de ambiente estiver definida, seu valor determinará a versão do Ruby a ser usada.
- Se o diretório de trabalho atual tiver um
.rbenv-version
arquivo, seu conteúdo será usado para definir oRBENV_VERSION
variável de ambiente.
- Se não houver
.rbenv-version
arquivo no diretório atual, o rbenv procurará em cada diretório pai por um .rbenv-version
arquivo até atingir a raiz do seu sistema de arquivos. Se for encontrado, seu conteúdo é usado para definir oRBENV_VERSION
variável de ambiente.
- Se
RBENV_VERSION
ainda não estiver definido, o rbenv tenta defini-lo usando o conteúdo do ~/.rbenv/version
arquivo.
- Se nenhuma versão for especificada em nenhum lugar, o rbenv assume que você deseja usar o Ruby "system" - ou seja, qualquer versão seria executada se o rbenv não estivesse no seu caminho.
(Você pode definir uma versão Ruby específica do projeto com o rbenv local
comando, que cria um .rbenv-version
arquivo no diretório atual. Da mesma forma, o rbenv global
comando modifica o~/.rbenv/version
arquivo.)
Armado com uma RBENV_VERSION
variável de ambiente, o rbenv adiciona ~/.rbenv/versions/$RBENV_VERSION/bin
à sua frente PATH
e depois executa o comando e os argumentos passados para rbenv exec
. Voila!
Para uma visão completa do que exatamente acontece sob o capô, tente configurar RBENV_DEBUG=1
e executar um comando Ruby. Todo comando Bash executado pelo rbenv será gravado no seu terminal.
Agora, o rbenv se preocupa apenas com a alternância de versões, mas um ecossistema próspero de plugins o ajudará a fazer tudo, desde a instalação do Ruby até a configuração do seu ambiente , o gerenciamento de "gemsets" e até a automaçãobundle exec
.
Não tenho muita certeza do que o suporte ao IRC tem a ver com a troca de versões do Ruby, e o rbenv foi projetado para ser simples e compreensível o suficiente para não exigir suporte. Mas se você precisar de ajuda, o rastreador de problemas e o Twitter estão a apenas alguns cliques de distância.
Divulgação: Eu sou o autor de rbenv, ruby-build e rbenv-vars.