bundler vs RVM vs gems vs RubyGems vs gemsets vs system ruby ​​[chiuso]


102

Sono nuovo in Ruby e sto cercando di capire i seguenti concetti: bundler vs RVM vs gems vs RubyGems vs gemsets vs system rub e sono confuso.

Qualcuno può descrivere una "best practice" su come dovrei gestire tutto questo su una nuova installazione dell'ultima versione di Ubuntu? Cosa dovrei installare e come dovrei usarlo tutto?

Immagino che sudo apt-get install rubynon sia consigliabile fare un , ma non ne sono sicuro. L'ho provato sul mio sistema oltre a "tutte le altre cose di Ruby". Sta solo aggiungendo alla mia confusione. Non sto parlando di Rails ma solo di normali gemme Ruby (es. Vagrant, Chef, script).

Risposte:


184

Come per la risposta precedente, questo è abbastanza da coprire, quindi considera questa una breve introduzione.

le gemme sono il modo in cui le librerie Ruby sono pacchettizzate. Sono per Ruby ciò che i barattoli sono per Java. All'interno di un file gem, trovi il codice Ruby (file .rb), ma anche dei test, e un file speciale che fornisce informazioni sul gem stesso, come il suo nome, le dipendenze e la versione ( gemspec ). Qualsiasi progetto Ruby può definire le gem di cui ha bisogno tramite un Gemfile che deve solo dichiarare le dipendenze. Rubygems è il nome del gestore dei pacchetti, lo strumento utilizzato per installare i pacchetti (mentre le gemme sono i pacchetti stessi). Rubygems ora fa parte di Ruby.

Bundler è ciò che rende sopportabile la gestione delle gemme. In base al tuo Gemfile, una semplice chiamata al bundler utilizzando l' installazione del bundle scaricherà e installerà tutte le gemme richieste. Usando il comando gem standard, dovresti installare ciascuno di essi manualmente, usandogem install <gem_name>. Bundler non fa parte di Ruby (è a sua volta confezionato come una gemma ), ma è uno "standard de facto" per la maggior parte delle applicazioni (non troverai molte persone che non lo usano, e non ci sono buone ragioni per non usarlo, in realtà).

RVM è uno strumento che ti consente di installare più versioni di Ruby su una macchina, passando da una all'altra quando necessario. Questo può essere usato per installare sia un Ruby 1.8 che un 1.9, o anche un "MRI" (Matz's Ruby, l'implementazione predefinita) e alternative (come JRuby o Rubinius). Nota che RVM non è solo in questo campo, vedi ad esempio rbenv .

Un gemset in RVM è un insieme di gemme specifiche per un dato contesto, tipicamente un progetto. Ciò è utile, ad esempio, se stai sviluppando applicazioni diverse, ciascuna con il proprio set di gemme, e desideri tenerle separate.

Il sistema Ruby è, quando si utilizza RVM, la versione Ruby installata sulla macchina (cioè, non tramite RVM).

Se stai appena iniziando, le gemme e il bundler ti interessano. Per ora puoi lasciare da parte RVM e gemset.


1
Buona risposta, potresti chiarire: qual è la differenza tra gemme e RubyGems? E tra gemspec e Gemfile? Inoltre, quali di questi programmi (es. Bundler) sopra elencati sono inclusi in "Ruby" e quali sono applicazioni separate (credo che RVM sia separato)? E gemset è solo un concetto solo all'interno di RVM o è anche all'interno del core Ruby (o altre cose, come rbenv menzionato nell'altra risposta)? E se il bundler semplifica la gestione delle gemme, qual era il modo pre-bundler di farlo? (cioè come gestiresti le gemme senza bundler, solo così lo so, anche se non lo farei mai in quel modo.) Grazie!
user779159

Quindi Rubygems è il nome del gestore di pacchetti, che invochi con il comando "gem"? E anche il bundler fa parte di Ruby stesso, proprio come lo è Rubygems, o devo includerlo in qualche modo?
user779159

2
"Se stai appena iniziando ... [puoi] lasciare RVM ... da parte per ora." A meno che tu non sia su OS X e il progetto Ruby che desideri installare ed eseguire dipende da una versione successiva di Ruby rispetto a quella preinstallata sul sistema operativo. Allora avrai bisogno di RVM.
Efesto

Questo non è vero: "Utilizzando il comando gem standard, dovresti installarli manualmente". Puoi sicuramente installare tutte le gemme nel tuo file gem utilizzando un unico comando "gem install"
Andy

1

Stai chiedendo più informazioni in una domanda rispetto a quanto rientra nell'ambito di Stack Overflow. Per coprire tutto ci vorrebbe un libro.

Su Ubuntu è facile installare e rimuovere gemme nella versione "di sistema" di Ruby, quindi abituati a installare e rimuovere gemme regolari tramite sudo. (Su Mac OS darei consigli diversi perché Apple raggruppa Ruby per uso personale e non è una buona idea scherzare con esso.) Quindi, quando hai un'idea di come funziona l'intera idea della gemma, e sai che vuoi più Versioni di Ruby sul tuo sistema, prova " rbenv " o " RVM " e installa una o due versioni nella tua sandbox.

Linux rende facile aggiungere / rimuovere Ruby tramite una distribuzione, ma siamo limitati alle versioni che i manutentori della distribuzione hanno impacchettato, quindi di solito installo dai sorgenti. Ma questo è un problema quando si gestiscono diverse versioni di Ruby per i sistemi di sviluppo, test e produzione, motivo per cui sono stati inventati rbenv e RVM : gestiscono i dettagli sporchi permettendoci di concentrarci sulla programmazione.

Ho usato sia rbenv che RVM e ho usato rbenv negli ultimi sei mesi circa, con buoni risultati. È meno complicato dell'RVM che mi piace. In entrambi i casi rendono facile avere diverse versioni installate, con set separati di gemme. Se lo desideri, puoi avere diverse versioni di Ruby aperte in diverse finestre di terminale, semplificando il test di compatibilità.

La regola uno durante il debug è apportare le modifiche una alla volta, il che è vero per imparare a programmare o imparare una nuova lingua. Non distrarti, mantienilo semplice.


1
Non eseguire mai sudo alcun gestore di pacchetti diverso dal gestore di pacchetti di sistema predefinito (ad esempio apt o apt-get). Inevitabilmente rovinerai il tuo sistema.
immagine
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.