web-dev-qa-db-fra.com

bundler vs RVM vs gems vs RubyGems vs gemsets vs system ruby

Je suis nouveau dans Ruby et j'essaie de comprendre les concepts suivants: bundler vs RVM vs gems vs RubyGems vs gemsets vs system rub et je suis confus.

Quelqu'un peut-il décrire une "meilleure pratique" de la façon dont je dois gérer tout cela sur une nouvelle installation de la dernière version d'Ubuntu? Que dois-je installer et comment dois-je tout utiliser?

Je suppose que faire un Sudo apt-get install Ruby n'est pas recommandé, mais je n'en suis pas sûr. Je l'ai essayé sur mon système en plus de 'tous les autres Ruby stuff'. Cela ne fait qu'ajouter à ma confusion. Je ne parle pas de Rails mais juste régulière Ruby gemmes (par exemple Vagrant, Chef, scripts).

90
user779159

Comme dans la réponse précédente, c'est beaucoup à couvrir, alors considérez ceci comme une courte introduction.

gemmes sont la façon Ruby les bibliothèques sont emballées. Elles sont à Ruby ce que sont les jars pour Java. Dans un fichier gem, vous trouvez Ruby (fichiers .rb), mais aussi des tests et un fichier spécial donnant des informations sur la gemme elle-même). , comme son nom, ses dépendances et sa version ( gemspec ). Tout projet Ruby peut définir les gemmes dont il a besoin via un Gemfile qui vient besoin de déclarer des dépendances. Rubygems est le nom du gestionnaire de paquets - l'outil utilisé pour installer les paquets (tandis que les gemmes sont les paquets eux-mêmes). fait maintenant partie de Ruby.

Bundler est ce qui rend la gestion des gemmes supportable. Basé sur votre Gemfile, un simple appel à bundler en utilisant bundle install téléchargera et installera toutes les gemmes requises. En utilisant la commande standard gem, vous devez installer chacun d'eux manuellement, en utilisant gem install <gem_name>. Bundler ne fait pas partie de Ruby (c'est lui-même emballé comme un joya ), mais c'est un "standard de facto" pour la plupart des applications (vous ne trouverez pas beaucoup de gens pas l'utiliser, et pas de bonnes raisons de ne pas l'utiliser, en fait).

[[# # ~] rvm [~ # ~] est un outil vous permettant d'installer plusieurs versions de Ruby sur une machine, en basculant entre eux lorsque cela est nécessaire. Cela peut être utilisé pour installer à la fois un Ruby 1.8 et 1.9, ou même un "MRI" (Matz's Ruby, la valeur par défaut) implémentation) et alternatives (telles que JRuby ou Rubinius). Notez que RVM n'est pas seul dans ce domaine, voir par exemple rbenv .

A gemset dans RVM est un ensemble de gemmes spécifiques à un contexte donné, généralement un projet. Ceci est utile si vous développez par exemple différentes applications, chacune avec ses propres ensembles de gemmes, et que vous souhaitez les garder séparées.

système Ruby est, lors de l'utilisation de RVM, la version Ruby installée sur la machine ( c'est-à-dire pas via RVM).

Si vous débutez, les gemmes et le bundler vous intéressent. Vous pouvez laisser RVM et les gemmes de côté pour l'instant.

166
Martin

Vous demandez plus d'informations dans une seule question que ce qui est prévu pour Stack Overflow. Pour couvrir tout cela, il faudrait un livre.

Sur Ubuntu, il est facile d'installer et de supprimer des gemmes dans la version "système" de Ruby, alors habituez-vous à installer et supprimer des gemmes régulières via Sudo. (Sur Mac OS, je donnerais des conseils différents parce que Apple bundles Ruby pour leur propre usage et ce n'est pas une bonne idée de jouer avec.) Ensuite, lorsque vous avez une idée du fonctionnement de l'idée de gemme et que vous savez que vous voulez plusieurs versions Ruby sur votre système, essayez " rbenv " ou " RVM "et installez une ou deux versions dans votre bac à sable.

Linux facilite l'ajout/la suppression de Ruby via une distribution, mais nous sommes limités aux versions que les mainteneurs de distribution ont empaquetées, donc j'installe habituellement à partir des sources. Mais, c'est une douleur lors de la gestion plusieurs versions de Ruby pour les systèmes de développement, de test et de production, c'est pourquoi rbenv et RVM = ont été inventés - ils gèrent le détail sale nous permettant de nous concentrer sur la programmation.

J'ai utilisé à la fois rbenv et RVM , et j'utilise rbenv depuis environ six mois, avec de bons résultats. C'est moins compliqué que RVM que j'aime. Dans les deux cas, ils facilitent l'installation de différentes versions, avec des ensembles de gemmes séparés. Vous pouvez avoir différentes versions de Ruby ouvertes dans différentes fenêtres de terminal si vous le souhaitez, ce qui facilite le test de compatibilité.

La première règle lors du débogage consiste à apporter des modifications une par une, ce qui est vrai pour l'apprentissage de la programmation ou l'apprentissage d'une nouvelle langue. Ne soyez pas distrait, restez simple.

1
the Tin Man