Neste artigo, compararei os gerenciadores de versão mais populares para Ruby em um Mac: Chruby, Rbenv e RVM, bem como Asdf, um gerenciador de versão para múltiplas linguagens, e Frum, um gerenciador de versão novo e escrito em Rust. Darei recomendações baseadas no que você provavelmente mais precisará.
Ruby Pré-instalada Não é para Desenvolvedores
Pessoas que estão começando com Ruby ficam encantadas ao descobrir que Ruby vem pré-instalado no macOS. Geralmente ficam decepcionadas quando um desenvolvedor mais experiente diz a elas: “Não use o Ruby do sistema do Mac.” Escrevi em outro lugar sobre os motivos. Em resumo, o Ruby do sistema está lá para o macOS, não para você. É bom para executar scripts de utilitários, mas para o desenvolvimento, o Ruby do sistema está desatualizado e, se você não for cuidadoso, a instalação de gems pode causar dores de cabeça (incluindo violações de segurança do sistema).
O Problema do Homebrew com Ruby
O Homebrew é o gerenciador de pacotes que se tornou praticamente padrão para adicionar software para desenvolvedores no macOS. O Homebrew facilita a instalação de uma nova versão do Ruby para evitar depender do Ruby do sistema. Mas existem dois problemas com o Homebrew. Primeiro, a versão do Ruby do Homebrew pode ser substituída automaticamente e inesperadamente por uma versão mais recente quando outros pacotes do Homebrew são instalados (um problema resolvido por brew pin ruby
). Mais importante, o Homebrew permite que você instale apenas uma versão do Ruby. Se você está desenvolvendo ou mantendo mais de um projeto em Ruby, provavelmente precisará alternar entre versões do Ruby. É aí que você precisará de um gerenciador de versão.
Asdf para Múltiplas Linguagens
Asdf é um gerenciador de versões que atende a várias linguagens. Se você está usando Ruby para desenvolver aplicações web com Rails 6, precisará instalar Node e Yarn para criar uma aplicação inicial do Rails. (O Rails 7 pode eliminar a necessidade de Node, mas isso ainda não está certo neste momento.)
Então, para um desenvolvedor Rails, o Asdf é um gerenciador de versões ideal. Também será útil se você desenvolver aplicações em Python, Elixir ou em muitas outras linguagens (veja uma lista de linguagens suportadas). Existe alguma desvantagem em usar o Asdf? Apenas duas. Ele usa shims para interceptar comandos comuns, o que pode dificultar a solução de problemas. Além disso, pode ser um pouco lento para algumas operações. Se você está desenvolvendo em várias linguagens, recomendo que experimente o Asdf para ver se gosta. Troque para o Frum, o gerenciador de versões somente para Ruby escrito em Rust, se encontrar que o Asdf está retardando você.
Gerenciadores de Versão Somente para Ruby
Se você pretende apenas desenvolver aplicações usando Ruby, escolha entre os quatro gerenciadores de versão somente para Ruby: Chruby, Frum, Rbenv e RVM. As diferenças entre os quatro estão na velocidade, complexidade e em como cada um alterna as versões do Ruby. Vamos analisar o mais antigo primeiro: RVM.
RVM
RVM foi o primeiro gerenciador de versão popular para Ruby. Ainda é mantido e amplamente utilizado. O RVM modifica o comando do sistema cd
para definir variáveis de ambiente quando você muda de diretório. Para substituir o comando cd
, o script de instalação do RVM altera o arquivo de configuração do shell (o arquivo ~/.zshrc
em Macs mais recentes).
O RVM exibe corretamente as variáveis de ambiente para revelar a versão e o local do Ruby e do gem, o que pode ajudar a diagnosticar problemas. No entanto, o RVM inclui recursos adicionais, como gemsets. Os gemsets não são mais necessários, uma vez que o Bundler foi adicionado ao núcleo do Ruby para gerenciar dependências de gem. A complexidade adicional não é necessária, então muitos desenvolvedores mudaram para um gerenciador de versão mais recente, como Rbenv, Chruby ou Frum.
Rbenv
Juntamente com o RVM, Rbenv tem sido um dos gerenciadores de versão mais populares para Ruby. O Rbenv usa shims para interceptar comandos Ruby comuns. (O Asdf também usa shims.)
Após instalar o Rbenv com o Homebrew, você deve modificar seu arquivo ~/.zshrc
para que os shims do Rbenv tenham prioridade sobre os comandos Ruby comuns. O shim chama o comando rbenv exec
, que determina qual versão do Ruby usar antes de executar qualquer comando Ruby.
Shims têm dois inconvenientes. Primeiro, shims dificultam a solução de problemas ao ocultar o comando real. Por exemplo, o comando which ruby
mostra o shim do Rbenv, não a versão real do Ruby (você deve definir a variável de ambiente RBENV_DEBUG
se quiser ver o comando real do Ruby). Segundo, um shim pode adicionar microssegundos de atraso à execução de um comando Ruby. (O Rbenv intervém toda vez que você executa um comando Ruby, ao contrário do RVM, que intervém apenas quando você muda de diretório.) Para desenvolvedores que percebem o atraso, ou não gostam da ideia de shims, há o Chruby ou o Frum.
Chruby
Chruby não é tão conhecido quanto o RVM ou o Rbenv, mas é defendido por vários desenvolvedores Ruby proeminentes. Ao contrário do RVM, ele não substitui o comando cd
. Ao contrário do Rbenv ou do Asdf, ele não intercepta comandos usando shims. Você precisará modificar seu arquivo ~/.zshrc
para que o Chruby seja executado no ambiente de shell local. Não é necessário modificar seu $PATH
, pois o Chruby faz isso por você, com base na versão do Ruby selecionada.
O Chruby também define certas variáveis de ambiente para o Ruby. Isso é tudo o que é necessário para o Chruby alternar entre versões do Ruby. Funciona bem para solução de problemas com which
. Usei o Chruby por vários anos e não tive problemas com ele. O Chruby é uma ótima escolha, mas você pode querer experimentar o Frum, o gerenciador de versões Ruby mais recente.
Frum
Frum é escrito em Rust, uma ótima linguagem para execução rápida de software de sistema no terminal. Frum é novo (lançado no início de 2021). Ao contrário de Asdf, Chruby ou Rbenv, ele inclui um comando de instalação interno para o Ruby, portanto, não é necessário nenhum programa extra para instalar o Ruby. O instalador é rápido e Frum não requer dependências (é um executável Rust all-in-one que você pode instalar com o Homebrew).
Após a instalação do Frum, você deve modificar seu arquivo ~/.zshrc
para que o Frum seja executado em seu ambiente de shell local. Como os outros gerenciadores de versão, ele verifica se há um arquivo .ruby-version
em um diretório de projeto e, se não houver uma versão especificada para um projeto, ele usará a versão global do Ruby por padrão. Não há shims (ao contrário de Asdf ou Rbenv) e ele não substitui o comando cd
(ao contrário do RVM). Embora seja novo, eu o recomendo porque é all-in-one e rápido.
Instalando um Gerenciador de Versão para Ruby
I’ve written a complete guide to installing Ruby on Mac. In the guide, I provide instructions for:
- instalando Ruby com Asdf
- instalando Ruby com Frum
- instalando Ruby com Chruby
- instalando Ruby com Homebrew
Se você deseja explorar o RVM ou Rbenv, consulte:
A Note about Docker
Se você mencionar gerenciadores de versões Ruby, alguém provavelmente dirá: “Eu uso Docker.” Docker é uma ferramenta de containerização que alguns desenvolvedores utilizam para gerenciamento de versões. O caso de uso principal para Docker é criar um servidor virtual reproduzível que contenha uma versão configurada de qualquer dependência de software necessária para executar um aplicativo (linguagem, bancos de dados, filas de mensagens). Dessa forma, é ideal para criar uma versão “congelada” de um ambiente de desenvolvimento para implantação em um servidor.
Você também pode desenvolver localmente dentro de um contêiner, mas isso será mais lento, exigirá mais memória e adicionará complexidade de configuração em comparação a um gerenciador de versões. Para manter as coisas simples, evito o Docker para desenvolvimento local a menos que um aplicativo seja extremamente complexo.
Conclusão
Se você está trabalhando em vários projetos em Ruby, não é apenas um usuário casual de Ruby. Certifique-se de instalar um ótimo gerenciador de versões em seu ambiente de desenvolvimento local.
I like Asdf because I develop in Ruby and JavaScript and Asdf gives me one version manager for both languages. However, Asdf uses shims (like Rbenv) so occasionally it’s slower than I like. I also find it annoying that Asdf hides the actual command from troubleshooting with the which
command. If these drawbacks outweigh the convenience of managing multiple languages, I recommend using Frum to switch among your Ruby versions. Version managers should be simple and stay out of your way when you’re working.
Perguntas Frequentes (FAQs) sobre Gerenciadores de Versão Ruby para MacOS
Quais são as principais diferenças entre RVM e rbenv?
RVM (Ruby Version Manager) e rbenv são ambas ferramentas para gerenciar múltiplas versões do Ruby em seu sistema. A principal diferença está em sua abordagem. O RVM é mais ricoh em recursos e permite que você gerencie gemsets – um conjunto de gems utilizadas para um aplicativo Ruby específico. Por outro lado, o rbenv é mais simples e se concentra apenas na troca de versões do Ruby. Ele não suporta gemsets, mas você pode obter funcionalidade semelhante usando um plugin chamado ruby-build.
Como eu instalo uma versão específica do Ruby usando RVM?
Para instalar uma versão específica do Ruby usando RVM, você pode usar o comando ‘rvm install’ seguido do número da versão. Por exemplo, para instalar o Ruby 2.6.3, você usaria o comando ‘rvm install 2.6.3’. Uma vez instalado, você pode alternar para esta versão usando o comando ‘rvm use’, como ‘rvm use 2.6.3’.
Posso usar tanto RVM quanto rbenv no mesmo sistema?
Embora seja tecnicamente possível ter tanto RVM quanto rbenv instalados no mesmo sistema, geralmente não é recomendado. Ambas as ferramentas modificam seu ambiente de shell e ter ambas pode levar a comportamentos inesperados. É melhor escolher uma com base em suas necessidades e aderir a ela.
Como eu desinstalo uma versão do Ruby usando rbenv?
Para desinstalar uma versão do Ruby usando rbenv, você pode usar o comando ‘rbenv uninstall’ seguido do número da versão. Por exemplo, para desinstalar o Ruby 2.6.3, você usaria o comando ‘rbenv uninstall 2.6.3’.
Como eu defino uma versão padrão do Ruby com RVM?
Para definir uma versão padrão do Ruby com o RVM, você pode usar o comando ‘rvm –default use’ seguido do número da versão. Por exemplo, para definir o Ruby 2.6.3 como padrão, você usaria o comando ‘rvm –default use 2.6.3’.
Como atualizo o rbenv e seus plugins?
Para atualizar o rbenv e seus plugins, você pode usar o git. Navegue até o diretório do rbenv no seu terminal (geralmente ‘~/.rbenv’) e execute ‘git pull’. Em seguida, navegue até cada diretório de plugin e faça o mesmo.
Posso usar o RVM ou rbenv com outras linguagens de programação?
O RVM e o rbenv são projetados especificamente para gerenciar versões do Ruby. Se você precisar gerenciar versões de outras linguagens de programação, pode querer olhar para ferramentas como pyenv para Python ou nvm para Node.js.
Como listo todas as versões do Ruby instaladas com o rbenv?
Para listar todas as versões do Ruby instaladas com o rbenv, você pode usar o comando ‘rbenv versions’. Isso mostrará uma lista de todas as versões do Ruby que o rbenv pode usar.
Como lidar com dependências de gem com o RVM?
O RVM permite gerenciar dependências de gem por meio do uso de gemsets. Você pode criar um gemset com o comando ‘rvm gemset create’, alternar para ele com o comando ‘rvm gemset use’ e, em seguida, instalar gems conforme necessário.
Como instalo uma nova versão do Ruby com o rbenv?
Para instalar uma nova versão do Ruby com o rbenv, você pode usar o comando ‘rbenv install’ seguido do número da versão. Por exemplo, para instalar o Ruby 2.6.3, você usaria o comando ‘rbenv install 2.6.3’.
Source:
https://www.sitepoint.com/ruby-version-managers-macos/