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, geme 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 rehashpara garantir que quaisquer novos comandos sejam shimmed.
Esses shims residem em um único diretório ( ~/.rbenv/shimspor 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 rubypartir da linha de comando ou executar um script cujo shebang lê #!/usr/bin/env ruby, seu sistema operacional o localizará ~/.rbenv/shims/rubyprimeiro e o executará em vez de qualquer outro rubyexecutá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 execcomando 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-versionarquivo, seu conteúdo será usado para definir oRBENV_VERSION variável de ambiente.
- Se não houver
.rbenv-versionarquivo no diretório atual, o rbenv procurará em cada diretório pai por um .rbenv-versionarquivo 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_VERSIONainda não estiver definido, o rbenv tenta defini-lo usando o conteúdo do ~/.rbenv/versionarquivo.
- 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 localcomando, que cria um .rbenv-versionarquivo no diretório atual. Da mesma forma, o rbenv globalcomando modifica o~/.rbenv/version arquivo.)
Armado com uma RBENV_VERSIONvariável de ambiente, o rbenv adiciona ~/.rbenv/versions/$RBENV_VERSION/binà sua frente PATHe 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=1e 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.