rbenv é uma ferramenta gerenciadora de versão para a linguagem de programação Ruby em sistemas do tipo Unix. É útil para alternar entre múltiplas versões do Ruby na mesma máquina e para garantir que cada projeto em que você está trabalhando sempre seja executado na versão correta do Ruby.
Depois que o rbenv se injetar em seu PATH no momento da instalação, qualquer invocação de ruby
, gem
, bundler
ou outro executável relacionado ao Ruby ativará primeiro o rbenv. Em seguida, o rbenv verifica o diretório atual do projeto em busca de um arquivo chamado .ruby-version
. Se encontrado, esse arquivo determina a versão do Ruby que deve ser usada nesse diretório. Finalmente, o rbenv procura aquela versão do Ruby entre aquelas instaladas em ~/.rbenv/versions/
.
Você pode escolher a versão Ruby para o seu projeto com, por exemplo:
cd myproject
# choose Ruby version 3.1.2:
rbenv local 3.1.2
Fazer isso criará ou atualizará o arquivo .ruby-version
no diretório atual com a versão que você escolheu. Um projeto diferente seu, que é outro diretório, pode estar usando uma versão completamente diferente do Ruby - o rbenv fará a transição perfeita de uma versão do Ruby para outra quando você trocar de projeto.
Finalmente, quase todos os aspectos do mecanismo do rbenv são personalizáveis através de plugins escritos em bash.
A simplicidade do rbenv tem seus benefícios, mas também algumas desvantagens. Veja a comparação de gerenciadores de versões para mais detalhes e algumas alternativas.
Em sistemas com gerenciador de pacotes Homebrew, o método “Usando Gerenciadores de Pacotes” é recomendado. Em outros sistemas, “Basic Git Checkout” pode ser a maneira mais fácil de garantir que você esteja sempre instalando a versão mais recente do rbenv.
Instale o rbenv usando uma das abordagens a seguir.
No macOS ou Linux, recomendamos instalar o rbenv com Homebrew.
brew install rbenv
[!CUIDADO]
A versão do rbenv empacotada e mantida nos repositórios oficiais do Debian e Ubuntu está desatualizada . Para instalar a versão mais recente, é recomendado instalar o rbenv usando git.
sudo apt install rbenv
Archlinux possui um pacote AUR para rbenv e você pode instalá-lo a partir do AUR usando as instruções desta página wiki.
O Fedora possui um pacote oficial que você pode instalar:
sudo dnf install rbenv
Configure seu shell para carregar o rbenv.
rbenv init
Feche a janela do Terminal e abra uma nova para que as alterações tenham efeito.
É isso! Agora você está pronto para instalar algumas versões do Ruby.
Observação
Para uma instalação mais automatizada, você pode usar o rbenv-installer. Se você não deseja executar scripts baixados de uma URL da web ou simplesmente prefere uma abordagem manual, siga as etapas abaixo.
Isso permitirá que você use a versão mais recente do rbenv sem precisar de uma instalação em todo o sistema.
Clone rbenv em ~/.rbenv
.
git clone https://github.com/rbenv/rbenv.git ~ /.rbenv
Configure seu shell para carregar o rbenv.
~ /.rbenv/bin/rbenv init
Se você está curioso, veja aqui para entender o que init
faz.
Reinicie seu shell para que essas alterações tenham efeito. (Abrir uma nova guia de terminal geralmente resolverá isso.)
Ao instalar manualmente o rbenv, pode ser útil observar como funcionam os scripts de conclusão para vários shells. Os scripts de conclusão ajudam a digitar comandos rbenv expandindo nomes de comandos rbenv parcialmente inseridos e sinalizadores de opções; normalmente isso é invocado pressionando a tecla Tab em um shell interativo.
O script de conclusão do bash para rbenv acompanha o projeto e é carregado pelo mecanismo rbenv init
.
O script de conclusão zsh acompanha o projeto, mas precisa ser adicionado ao FPATH no zsh antes que possa ser descoberto pelo shell. Uma maneira de fazer isso seria editar ~/.zshrc
:
# assuming that rbenv was installed to `~/.rbenv`
FPATH= ~ /.rbenv/completions: " $FPATH "
autoload -U compinit
compinit
O script de conclusão de peixe para rbenv é enviado com o próprio shell de peixe e não é mantido pelo projeto rbenv.
O comando rbenv install
não vem com o rbenv pronto para uso, mas é fornecido pelo plugin ruby-build.
Antes de tentar instalar Ruby, verifique se seu ambiente de construção possui as ferramentas e bibliotecas necessárias . Então:
# list latest stable versions:
rbenv install -l
# list all local versions:
rbenv install -L
# install a Ruby version:
rbenv install 3.1.2
Para solucionar problemas de cenários BUILD FAILED
, verifique a seção de discussões do ruby-build.
Observação
Se o comando rbenv install
não foi encontrado, você pode instalar o ruby-build como um plugin:
git clone https://github.com/rbenv/ruby-build.git " $( rbenv root ) " /plugins/ruby-build
Defina uma versão Ruby para finalizar a instalação e começar a usar Ruby:
rbenv global 3.1.2 # set the default Ruby version for this machine
# or:
rbenv local 3.1.2 # set the Ruby version for this directory
Alternativamente ao comando rbenv install
, você pode baixar e compilar Ruby manualmente como um subdiretório de ~/.rbenv/versions
. Uma entrada nesse diretório também pode ser um link simbólico para uma versão Ruby instalada em outro lugar no sistema de arquivos.
Selecione uma versão Ruby para o seu projeto usando rbenv local 3.1.2
, por exemplo. Em seguida, prossiga com a instalação das gemas como faria normalmente:
gem install bundler
Observação
Você não deve usar o sudo para instalar gemas. Normalmente, as versões Ruby serão instaladas em seu diretório inicial e, portanto, poderão ser gravadas pelo seu usuário. Se você receber o erro “você não tem permissões de gravação” ao instalar gems, é provável que a versão Ruby do seu “sistema” ainda seja um padrão global. Mude isso com rbenv global <version>
e tente novamente.
Verifique o local onde as gemas estão sendo instaladas com gem env
:
gem env home
# => ~/.rbenv/versions/<version>/lib/ruby/gems/...
Com o passar do tempo, as versões Ruby que você instalar serão acumuladas em seu diretório ~/.rbenv/versions
.
Para remover versões antigas do Ruby, simplesmente rm -rf
o diretório da versão que você deseja remover. Você pode encontrar o diretório de uma versão específica do Ruby com o comando rbenv prefix
, por exemplo, rbenv prefix 2.7.0
.
O plugin ruby-build fornece um comando rbenv uninstall
para automatizar o processo de remoção.
Os principais comandos do rbenv que você precisa saber são:
Lista todas as versões Ruby conhecidas pelo rbenv e mostra um asterisco próximo à versão atualmente ativa.
$ rbenv versions
1.8.7-p352
1.9.2-p290
* 1.9.3-p327 (set by /Users/sam/.rbenv/version)
jruby-1.7.1
rbx-1.2.4
ree-1.8.7-2011.03
Exibe a versão do Ruby atualmente ativa, junto com informações sobre como ela foi definida.
$ rbenv version
1.9.3-p327 (set by /Users/sam/.rbenv/version)
Define uma versão Ruby específica do aplicativo local gravando o nome da versão em um arquivo .ruby-version
no diretório atual. Esta versão substitui a versão global e pode ser substituída configurando a variável de ambiente RBENV_VERSION
ou com o comando rbenv shell
.
rbenv local 3.1.2
Quando executado sem um número de versão, rbenv local
relata a versão local atualmente configurada. Você também pode cancelar a configuração da versão local:
rbenv local --unset
Define a versão global do Ruby a ser usada em todos os shells, gravando o nome da versão no arquivo ~/.rbenv/version
. Esta versão pode ser substituída por um arquivo .ruby-version
específico do aplicativo ou pela configuração da variável de ambiente RBENV_VERSION
.
rbenv global 3.1.2
O system
de nome de versão especial diz ao rbenv para usar o sistema Ruby (detectado pesquisando seu $PATH
).
Quando executado sem um número de versão, rbenv global
reporta a versão global atualmente configurada.
Define uma versão Ruby específica do shell definindo a variável de ambiente RBENV_VERSION
em seu shell. Esta versão substitui as versões específicas do aplicativo e a versão global.
rbenv shell jruby-1.7.1
Quando executado sem um número de versão, rbenv shell
relata o valor atual de RBENV_VERSION
. Você também pode desativar a versão do shell:
rbenv shell --unset
Observe que você precisará da integração do shell do rbenv habilitada (etapa 3 das instruções de instalação) para usar este comando. Se preferir não usar a integração shell, você pode simplesmente definir você mesmo a variável RBENV_VERSION
:
export RBENV_VERSION=jruby-1.7.1
Instala shims para todos os executáveis Ruby conhecidos pelo rbenv ( ~/.rbenv/versions/*/bin/*
). Normalmente você não precisa executar este comando, pois ele será executado automaticamente após a instalação do gems.
rbenv rehash
Exibe o caminho completo para o executável que o rbenv invocará quando você executar o comando fornecido.
$ rbenv which irb
/Users/sam/.rbenv/versions/1.9.3-p327/bin/irb
Lista todas as versões do Ruby que contêm o nome do executável especificado.
$ rbenv whence rackup
1.9.3-p327
jruby-1.7.1
ree-1.8.7-2011.03
Você pode afetar o modo como o rbenv opera com as seguintes configurações:
nome | padrão | descrição |
---|---|---|
RBENV_VERSION | Especifica a versão Ruby a ser usada. Veja também rbenv shell | |
RBENV_ROOT | ~/.rbenv | Define o diretório no qual residem as versões e shims do Ruby. Veja também rbenv root |
RBENV_DEBUG | Produz informações de depuração. Também como: rbenv --debug <subcommand> | |
RBENV_HOOK_PATH | veja wiki | Lista separada por dois pontos de caminhos pesquisados para ganchos rbenv. |
RBENV_DIR | $PWD | Diretório para começar a procurar arquivos .ruby-version . |
rbenv init
é um comando auxiliar para inicializar o rbenv em um shell. Este auxiliar faz parte das instruções de instalação recomendadas, mas é opcional, pois um usuário avançado pode configurar as tarefas a seguir manualmente. Aqui está o que o comando faz quando sua saída é eval
por um shell durante sua inicialização:
Adiciona o executável rbenv
ao PATH, se necessário.
Anexa o diretório ~/.rbenv/shims
ao PATH. Este é basicamente o único requisito para o rbenv funcionar corretamente.
Instala a conclusão do shell bash para comandos rbenv.
Regenera calços rbenv. Se esta etapa retardar a inicialização do shell, você poderá invocar rbenv init -
com o sinalizador --no-rehash
.
Instala o despachante "sh". Este bit também é opcional, mas permite que rbenv e plug-ins alterem variáveis em seu shell atual, tornando possíveis comandos como rbenv shell
.
Você pode executar rbenv init -
para inspecionar o script gerado.
A simplicidade do rbenv facilita desativá-lo temporariamente ou desinstalá-lo do sistema.
Para desabilitar o gerenciamento do rbenv em suas versões Ruby, simplesmente comente ou remova a linha rbenv init
da configuração de inicialização do shell. Isso removerá o diretório rbenv shims do PATH, e invocações futuras como ruby
executarão a versão Ruby do sistema, ignorando completamente o rbenv.
Embora desativado, rbenv
ainda estará acessível na linha de comando, mas seus aplicativos Ruby não serão afetados pela troca de versão.
Para desinstalar completamente o rbenv, execute a etapa (1) e remova o diretório raiz do rbenv. Isso excluirá todas as versões do Ruby que foram instaladas em `rbenv root`/versions/
:
rm -rf "$(rbenv root)"
Se você instalou o rbenv usando um gerenciador de pacotes, como etapa final execute a remoção do pacote rbenv:
brew uninstall rbenv
sudo apt purge rbenv
sudo pacman -R rbenv
Os testes são executados usando Bats:
$ bats test
$ bats test/<file>.bats
Sinta-se à vontade para enviar solicitações pull e registrar bugs no rastreador de problemas.