2013-03-23 30 views
68

Sono nuovo di Ruby e sto cercando di riprendere i concetti seguenti: bundler vs RVM vs gemme vs RubyGems vs gemsets vs system rub e I'm confused.bundler vs RVM vs gemme vs RubyGems vs gemsets vs system ruby ​​

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 non sia consigliabile fare un sudo apt-get install ruby, 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 di gemme Ruby regolari (ad esempio Vagrant, Chef, script).

risposta

127

Come per la risposta precedente, questo è un bel po 'da coprire, quindi considera una breve introduzione.

gems sono il modo in cui le librerie Ruby sono confezionate. Stanno a Ruby quali vasi stanno a Java. All'interno di un file gem, trovi il codice Ruby (file .rb), ma anche i test e un file speciale che fornisce informazioni sulla gemma stessa, come il nome, le dipendenze e la versione (gemspec). Qualsiasi progetto Ruby può definire le gemme di cui ha bisogno tramite un Gemfile che deve solo dichiarare le dipendenze. Rubygems è il nome del gestore pacchetti - lo strumento utilizzato per installare i pacchetti (mentre le gemme sono i pacchetti stessi). Rubygems ora fa parte di Ruby.

è ciò che rende sopportabile la gestione delle gemme. In base al tuo Gemfile, una semplice chiamata a bundler utilizzando bundle install scaricherà e installerà tutte le gemme richieste. Usando il comando gem standard, dovresti installare ognuno di essi manualmente, usando gem install <gem_name>.Bundler non fa parte di Ruby (è esso stesso packaged as a gem), ma è uno "standard de facto" per la maggior parte delle applicazioni (non troverete molte persone che non lo usano, e non ci sono buoni motivi per non usarlo, in realtà).

RVM è uno strumento che 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 1.9, o anche un "MRI" (Matz's Ruby, l'implementazione di default) e alternative (come JRuby o Rubinius). Si noti che RVM non è il solo in questo campo, si veda ad esempio rbenv.

A gemset in RVM è un insieme di gemme specifiche per un determinato contesto, in genere un progetto. Questo è utile se ad esempio stai sviluppando diverse applicazioni, ognuna con le sue serie di gemme, e vuoi tenerle separate.

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

Se stai iniziando, gemme e bundler ti interessano. Puoi lasciare RVM e pietre preziose da parte per ora.

+1

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

+0

Aggiornato di conseguenza. – Martin

+0

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

1

Stai chiedendo più informazioni in una domanda rispetto all'ambito per Stack Overflow. Per coprire tutto ciò richiederebbe un libro.

Su Ubuntu è facile installare e rimuovere le gemme nella versione "di sistema" di Ruby, quindi abituarsi a installare e rimuovere gems regolari tramite sudo. (Su Mac OS darei un consiglio diverso perché Apple mette in bundle Ruby per uso personale e non è una buona idea pasticciarlo.) Poi, quando hai un'idea di come funziona l'idea gemma intera, e sai che vuoi più Versioni ruby ​​sul tuo sistema, prova "rbenv" o "RVM" e installa una versione o due nella sandbox.

Linux semplifica l'aggiunta/rimozione di Ruby tramite una distribuzione, ma siamo limitati alle versioni distribuite dai maintainer di distro, quindi di solito installo dal sorgente. 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, che gestiscono i dettagli sporchi permettendoci di concentrarci sulla programmazione.

Ho usato sia rbenv e RVM, e ho utilizzato rbenv negli ultimi sei mesi circa, con buoni risultati. È meno complicato di RVM che mi piace. In entrambi i casi facilitano l'installazione di diverse versioni, con set separati di gemme. È possibile avere diverse versioni di Ruby aperte in finestre di terminale diverse, se lo si desidera, semplificando la verifica della compatibilità.

La regola uno durante il debug consiste nell'apportare le modifiche una alla volta, il che è vero per l'apprendimento della programmazione o l'apprendimento di una nuova lingua. Non essere distratto, mantienilo semplice.