In questo articolo, confronterò i gestori di versione più popolari per Ruby su Mac: Chruby, Rbenv e RVM, nonché Asdf, un gestore di versione per più linguaggi, e Frum, un nuovo gestore di versione scritto in Rust. Farò raccomandazioni in base a ciò che probabilmente avrai più bisogno.
Il Ruby predefinito non è per sviluppatori
Le persone che sono nuove a Ruby sono felici di scoprire che Ruby è preinstallato su macOS. Spesso rimangono deluse quando un sviluppatore più esperto dice loro: “Non usare il Ruby del sistema Mac”. Ho scritto altrove le ragioni. In breve, il Ruby del sistema è lì per macOS, non per te. Va bene per eseguire script di utilità, ma per lo sviluppo, il Ruby del sistema è datato e, se non sei attento, l’installazione di gemme può causare problemi (inclusi violazioni della sicurezza del sistema).
Il problema del Ruby di Homebrew
Homebrew è il gestore di pacchetti che è diventato uno standard quasi universale per aggiungere software per sviluppatori su macOS. Homebrew facilita l’installazione di una nuova versione di Ruby per evitare di fare affidamento sul Ruby del sistema. Ma ci sono due problemi con Homebrew. Innanzitutto, la versione di Ruby di Homebrew può essere sostituita automaticamente ed inaspettatamente con una versione più recente quando vengono installati altri pacchetti Homebrew (un problema risolto da brew pin ruby
). Più importante, Homebrew ti permette di installare una sola versione di Ruby. Se stai sviluppando o mantenendo più di un progetto in Ruby, probabilmente avrai bisogno di passare tra diverse versioni di Ruby. Ecco dove avrai bisogno di un gestore di versione.
Asdf per Multiple Lingue
Asdf è un gestore di versioni che supporta più lingue. Se stai utilizzando Ruby per sviluppare applicazioni web con Rails 6, dovrai installare Node e Yarn per creare un’applicazione di base Rails. (Rails 7 potrebbe eliminare la necessità di Node, ma ciò non è ancora certo al momento.)
Quindi, per uno sviluppatore Rails, Asdf è un gestore di versioni ideale. Ti sarà anche utile se sviluppi applicazioni in Python, Elixir o molte altre lingue (vedi una lista delle lingue supportate). C’è un rovescio della medaglia nell’usare Asdf? Solo due. Utilizza shim per intercettare comandi comuni, il che può rendere difficile la risoluzione dei problemi. Inoltre, può essere un po’ lento per alcune operazioni. Se sviluppi in più lingue, ti consiglio di provare Asdf per vedere se ti piace. Passa a Frum, il gestore di versioni Ruby solo scritto in Rust, se trovi che Asdf rallenta il tuo lavoro.
Gestori di Versioni Ruby Solo
Se hai intenzione di sviluppare applicazioni solo utilizzando Ruby, scegli tra i quattro gestori di versioni Ruby solo: Chruby, Frum, Rbenv e RVM. Le differenze tra i quattro stanno nella velocità, complessità e nel modo in cui ciascuno cambia versioni di Ruby. Diamo un’occhiata al più antico per primo: RVM.
RVM
RVM è stato il primo gestore di versioni popolare per Ruby. È ancora mantenuto e ampiamente utilizzato. RVM modifica il comando del sistema cd
per impostare le variabili di ambiente quando si cambiano directory. Per sovrascrivere il comando cd
, lo script di installazione di RVM modifica il file di configurazione dello shell (il file ~/.zshrc
sui nuovi Mac).
RVM visualizza correttamente le variabili di ambiente per mostrare la versione e la posizione di Ruby e dei gem, il che può aiutare a diagnosticare problemi. Tuttavia, RVM include funzionalità aggiuntive come i gemsets. I gemsets non sono più necessari, poiché Bundler è stato aggiunto al core di Ruby per gestire le dipendenze dei gem. La complessità aggiuntiva non è necessaria, quindi molti sviluppatori hanno passato a un nuovo gestore di versioni come Rbenv, Chruby o Frum.
Rbenv
Oltre a RVM, Rbenv è stato a lungo il gestore di versioni più popolare per Ruby. Rbenv utilizza shim per intercettare i comuni comandi Ruby. (Anche Asdf utilizza shim.)
Dopo aver installato Rbenv con Homebrew, è necessario modificare il tuo file ~/.zshrc
in modo che i shim di Rbenv abbiano la precedenza sui comuni comandi Ruby. Lo shim chiama il comando rbenv exec
, che determina quale versione di Ruby utilizzare prima di eseguire qualsiasi comando Ruby.
Gli shim presentano due svantaggi. Innanzitutto, rendono più difficile la risoluzione dei problemi nascondendo il comando effettivo. Ad esempio, il comando which ruby
mostra lo shim di Rbenv, non la versione effettiva di Ruby (è necessario impostare l’ambiente RBENV_DEBUG
se si desidera vedere il comando Ruby effettivo). In secondo luogo, uno shim può aggiungere microsecondi di ritardo all’esecuzione di un comando Ruby. (Rbenv interviene ogni volta che si esegue un comando Ruby, a differenza di RVM, che interviene solo quando si cambia directory.) Per i developer che notano il ritardo o non gradiscono l’idea degli shim, esistono Chruby o Frum.
Chruby
Chruby non è così noto come RVM o Rbenv, ma è promosso da diversi sviluppatori Ruby di spicco. A differenza di RVM, non sovrascrive il comando cd
. A differenza di Rbenv o Asdf, non intercetta i comandi utilizzando shims. È necessario modificare il file ~/.zshrc
affinché Chruby venga eseguito nell’ambiente locale della shell. Non è necessario modificare il tuo $PATH
, poiché Chruby lo fa per te, in base alla versione di Ruby selezionata.
Chruby imposta anche alcune variabili di ambiente per Ruby. Questo è tutto ciò che serve per far cambiare versione di Ruby con Chruby. Funziona bene per la risoluzione dei problemi con which
. Ho usato Chruby per diversi anni e non ho riscontrato problemi. Chruby è una scelta ottima, ma potresti voler provare Frum, il più recente gestore di versioni di Ruby.
Frum
Frum è scritto in Rust, un linguaggio adatto per l’esecuzione veloce da riga di comando di software di sistema. Frum è recente (rilasciato all’inizio del 2021). A differenza di Asdf, Chruby o Rbenv, include un comando di installazione integrato per Ruby, quindi non è necessario alcun programma aggiuntivo per installare Ruby. L’installatore è veloce e Frum non richiede dipendenze (è un’unica eseguibile Rust che puoi installare con Homebrew).
Dopo aver installato Frum, devi modificare il tuo file ~/.zshrc
in modo che Frum venga eseguito nell’ambiente locale dello shell. Come gli altri gestori di versioni, controlla un file .ruby-version
in una directory del progetto e, se non è specificata una versione per un progetto, utilizzerà di default una versione Ruby globale. Non ci sono shims (a differenza di Asdf o Rbenv) e non sovrascrive il comando cd
(a differenza di RVM). Nonostante sia nuovo, lo consiglio perché è unico e veloce.
Installazione di un Gestore di Versioni per Ruby
I’ve written a complete guide to installing Ruby on Mac. In the guide, I provide instructions for:
- installazione di Ruby con Asdf
- installazione di Ruby con Frum
- installazione di Ruby con Chruby
- installazione di Ruby con Homebrew
Se desideri esplorare RVM o Rbenv, consulta:
A Note about Docker
Se parli di gestori di versioni Ruby, probabilmente qualcuno dirà: “Io uso Docker”. Docker è uno strumento di containerizzazione utilizzato da alcuni sviluppatori per la gestione delle versioni. L’uso principale di Docker è creare un server virtuale riproducibile che contiene una versione configurata di qualsiasi dipendenza software necessaria per eseguire un’applicazione (linguaggio, database, code di messaggistica). Di conseguenza, è ideale per creare una versione “congelata” di un ambiente di sviluppo da distribuire su un server.
Puoi anche sviluppare localmente all’interno di un contenitore, ma sarà più lento, richiederà più memoria e aggiungerà complessità di configurazione rispetto a un gestore di versioni. Per mantenere le cose semplici, evito Docker per lo sviluppo locale a meno che un’applicazione non sia disturbantemente complessa.
Conclusione
Se stai lavorando su più progetti in Ruby, non sei solo un utente occasionale di Ruby. Assicurati di installare un ottimo gestore di versioni nel tuo ambiente di sviluppo locale.
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.
Domande Frequenti (FAQs) sui Gestori di Versioni Ruby per MacOS
Quali sono le principali differenze tra RVM e rbenv?
RVM (Ruby Version Manager) e rbenv sono entrambi strumenti per gestire più versioni di Ruby nel tuo sistema. La differenza chiave sta nel loro approccio. RVM è più ricco di funzionalità e ti consente di gestire gemsets – un insieme di gemme utilizzate per un particolare applicazione Ruby. D’altra parte, rbenv è più semplice e si concentra solo sul cambio di versioni di Ruby. Non supporta i gemsets, ma puoi ottenere una funzionalità simile utilizzando un plugin chiamato ruby-build.
Come posso installare una specifica versione di Ruby utilizzando RVM?
Per installare una specifica versione di Ruby utilizzando RVM, puoi utilizzare il comando ‘rvm install’ seguito dal numero di versione. Ad esempio, per installare Ruby 2.6.3, useresti il comando ‘rvm install 2.6.3’. Una volta installato, puoi passare a questa versione utilizzando il comando ‘rvm use’, come ‘rvm use 2.6.3’.
Posso usare sia RVM che rbenv sullo stesso sistema?
Mentre tecnicamente è possibile avere sia RVM che rbenv installati sullo stesso sistema, di solito non è consigliato. Entrambi gli strumenti modificano il tuo ambiente shell e avere entrambi può portare a comportamenti imprevisti. È meglio scegliere uno in base alle tue esigenze e attenervisi.
Come posso disinstallare una versione di Ruby utilizzando rbenv?
Per disinstallare una versione di Ruby utilizzando rbenv, puoi utilizzare il comando ‘rbenv uninstall’ seguito dal numero di versione. Ad esempio, per disinstallare Ruby 2.6.3, useresti il comando ‘rbenv uninstall 2.6.3’.
Come posso impostare una versione di Ruby predefinita con RVM?
Per impostare una versione predefinita di Ruby con RVM, puoi utilizzare il comando ‘rvm –default use’ seguito dal numero di versione. Ad esempio, per impostare Ruby 2.6.3 come predefinito, useresti il comando ‘rvm –default use 2.6.3’.
Come posso aggiornare rbenv e i suoi plugin?
Per aggiornare rbenv e i suoi plugin, puoi utilizzare git. Naviga nella directory di rbenv nel tuo terminale (di solito ‘~/.rbenv’) e esegui ‘git pull’. Quindi, naviga in ogni directory dei plugin e fai lo stesso.
Posso usare RVM o rbenv con altri linguaggi di programmazione?
RVM e rbenv sono progettati specificamente per gestire le versioni di Ruby. Se hai bisogno di gestire le versioni di altri linguaggi di programmazione, potresti voler considerare strumenti come pyenv per Python o nvm per Node.js.
Come faccio a elencare tutte le versioni di Ruby installate con rbenv?
Per elencare tutte le versioni di Ruby installate con rbenv, puoi usare il comando ‘rbenv versions’. Questo visualizzerà un elenco di tutte le versioni di Ruby che rbenv può utilizzare.
Come gestisco le dipendenze di gem con RVM?
RVM ti consente di gestire le dipendenze di gem attraverso l’uso di gemsets. Puoi creare un gemset con il comando ‘rvm gemset create’, passare a esso con il comando ‘rvm gemset use’ e quindi installare le gem come necessario.
Come posso installare una nuova versione di Ruby con rbenv?
Per installare una nuova versione di Ruby con rbenv, puoi utilizzare il comando ‘rbenv install’ seguito dal numero di versione. Ad esempio, per installare Ruby 2.6.3, useresti il comando ‘rbenv install 2.6.3’.
Source:
https://www.sitepoint.com/ruby-version-managers-macos/