bundler vs RVM vs gems vs RubyGems vs gemsets vs système ruby ​​[fermé]

102

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

Quelqu'un peut-il s'il vous plaît 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 utiliser tout cela?

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

user779159
la source

Réponses:

184

Selon la réponse précédente, c'est beaucoup à couvrir, alors considérez ceci comme une brève introduction.

les gemmes sont la façon dont les bibliothèques Ruby sont empaquetées. Ils sont à Ruby ce que les pots sont à Java. Dans un fichier gem, vous trouvez du code Ruby (fichiers .rb), mais aussi des tests, et un fichier spécial donnant des informations sur le gem lui-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 a juste besoin de déclarer des dépendances. Rubygems est le nom du gestionnaire de packages - l'outil utilisé pour installer les packages (tandis que les gemmes sont les packages eux-mêmes). Rubygems fait désormais partie de Ruby.

Bundler est ce qui rend la gestion des gemmes supportable. Sur la base de votre Gemfile, un simple appel au bundler à l'aide de l' installation groupée téléchargera et installera tous les gemmes nécessaires. En utilisant la commande gem standard, vous devrez installer chacun d'eux manuellement, en utilisantgem install <gem_name>. Bundler ne fait pas partie de Ruby (il est lui-même emballé comme un bijou ), mais c'est un "standard de facto" pour la plupart des applications (vous ne trouverez pas beaucoup de gens qui ne l'utilisent pas, et aucune bonne raison 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 elles en cas de besoin. Cela peut être utilisé pour installer à la fois un Ruby 1.8 et 1.9, ou même un "MRI" (Ruby de Matz, l'implémentation par défaut) et des alternatives (comme JRuby ou Rubinius). Notez que RVM n'est pas seul dans ce domaine, voir par exemple rbenv .

Un gemset dans RVM est un ensemble de pierres précieuses 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 séparer.

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 ne faites que commencer, les gemmes et le bundler vous intéressent. Vous pouvez laisser RVM et gemmes de côté pour le moment.

Martin
la source
1
Bonne réponse, pourriez-vous clarifier: Quelle est la différence entre les gemmes et les RubyGems? Et entre gemspec et Gemfile? De plus, lesquels de ces programmes (par exemple bundler) listés ci-dessus sont inclus avec «Ruby» et lesquels sont des applications séparées (je crois que RVM est distinct)? Et est-ce que gemset est juste un concept uniquement dans RVM ou est-il également dans le noyau Ruby (ou d'autres choses, comme rbenv mentionné dans l'autre réponse)? Et si bundler facilite la gestion des gemmes, quelle était la manière pré-bundler de le faire? (c'est-à-dire comment géreriez-vous les gemmes sans bundler, juste pour que je sache, même si je ne le ferais jamais de cette façon.) Merci!
user779159
Donc Rubygems est le nom du gestionnaire de paquets, que vous invoquez avec la commande 'gem'? Et le bundler fait-il également partie de Ruby lui-même, tout comme Rubygems, ou dois-je l'inclure d'une manière ou d'une autre?
user779159
2
"Si vous venez juste de commencer ... [vous] pouvez laisser RVM ... de côté pour le moment." Sauf si vous êtes sur OS X et que le projet Ruby que vous souhaitez installer et exécuter dépend d'une version ultérieure de Ruby que celle qui est préinstallée sur le système d'exploitation. Ensuite, vous aurez besoin de RVM.
Hephaestus
Ce n'est pas vrai: "En utilisant la commande gem standard, vous devrez installer chacun d'eux manuellement." Vous pouvez certainement installer tous les gemmes dans votre fichier gem en utilisant une seule commande "gem install"
Andy
1

Vous demandez plus d'informations en une seule question que dans le champ d'application de Stack Overflow. Pour tout couvrir, 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 car Apple regroupe 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 toute l'idée de gemme, et que vous savez que vous en voulez plusieurs Versions Ruby sur votre système, essayez " rbenv " ou " RVM " et installez une ou deux versions dans votre sandbox.

Linux facilite l'ajout / la suppression de Ruby via une distribution, mais nous sommes limités aux versions que les responsables de la distribution ont emballées, donc j'installe généralement à partir des sources. Mais c'est une douleur lors de la gestion de 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 les détails sales 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 séparés de Gems. Vous pouvez ouvrir différentes versions de Ruby 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 apprendre à programmer ou à apprendre une nouvelle langue. Ne soyez pas distrait, restez simple.

l'homme d'étain
la source
1
Ne sudo aucun gestionnaire de paquets autre que votre gestionnaire de paquets système par défaut (par exemple apt ou apt-get). Vous allez inévitablement gâcher votre système.
image le