Comment «activer» une version différente d'une gemme particulière?

85

Je veux basculer entre les rails 2.3.10 en tant que gemme "active" pour mon OS, afin de pouvoir l'invoquer en ligne de commande.

Est-il possible de faire cela? Je n'utilise pas rvm. Il est peut-être temps de commencer.

J'ai essayé gem install rails --version=2.3.10, mais cela garantit simplement que la version de la gemme est installée, elle ne la met pas /usr/bin/rails.

(J'utilise déjà le bundler pour mes applications - mais je n'ai pas eu besoin de contrôle précis sur les gemmes au niveau du système d'exploitation jusqu'à présent)

John Bachir
la source

Réponses:

154

Si votre problème est d'exécuter des binaires d'une certaine version, alors:

rails --version # => the latest version
rails _2.3.10_ --version # => Rails 2.3.10

Ce pattern ( gem-binary _gem-version_) fonctionne pour n'importe quel binaire gem.

J'espère que cela aide.

Daniel Vartanov
la source
1
Oh, cela vient de me sauver un long week-end au bureau, merci!
Lachlan McD.
2
Cela ne semble pas fonctionner pour tous: rackup _1.4.3_ --version<br> Rack 1.1 (Release: 1.4)
Chloe
1
rackup imprime uniquement la version finale (voir Rack.versionet Rack.release github.com/rack/rack/blob/master/lib/rack.rb ). Essayez gem install rack --version=1.3 && rackup _1.3.0_ --version, il imprimeraRack 1.1 (Release: 1.3)
Daniel Vartanov
Et juste au cas où, voici comment cela fonctionne:which rackup | xargs cat
Daniel Vartanov
Merci Daniel très utile
itinéraire
12

Utiliser RVM

RVM vous permet de gérer différentes versions de Ruby et Gems. Vous pouvez installer une version de ruby ​​en utilisant, par exemple

rvm install 1.9.2

Vous pouvez ensuite l'utiliser en utilisant:

rvm use 1.9.2

Utilisez des gemmes spécifiques par projet avec des ensembles de gemmes.

Si vous voulez plus d'espacement de noms, vous pouvez configurer des gemsets; répertoires qui contiendront des gemmes spécifiques pour un projet spécifique.

rvm gemset create myproject

alors vous pouvez les utiliser comme ceci:

rvm use 1.9.2@myproject

Automatisation

Pour automatiser le processus de changement de gemmes, insérez les fichiers .ruby-version et .ruby-gemset à la racine de votre projet. Pop la version de Ruby et le nom du jeu de gemmes que vous souhaitez utiliser à l'intérieur et RVM sélectionnera le jeu de gemmes correct lorsque vous effectuez un cd dans le répertoire de votre projet.

Installer des gemmes dans votre ensemble de gemmes

Installez vos gemmes dans votre ensemble de gemmes de la manière habituelle en utilisant bundler si vous l'utilisez:

bundle install

ou simplement en utilisant l'ancien classique:

gem install mygem

Les gemmes iront dans le bon jeu de gemmes.

Alternatives RVM

Vous voudrez peut-être également consulter rbenv, qui fait un travail similaire.

superluminaire
la source
1
problème avec rvm est (comme vous l'avez mentionné) qu'il gère les versions ruby ​​et les versions gem. rbenv ne gère que les versions ruby ​​et laisse le bundler gérer les versions gem.
daslicious
7

Vous pouvez utiliser RVM

Ensuite, vous pouvez également utiliser Bundler par la suite, qui gère correctement les dépendances de gemmes.

Dans votre Gemfile

gem "rails", "2.3.10"

et dans votre application

require 'rubygems'
require 'bundler/setup'

et tu as fini.

Chubas
la source
De plus, si vous voulez que certains scripts ne "voient" que les versions déclarées dans votre Gemfile, exécutez-les en tant que "bundle exec <script-name>", par exemplebundle exec warble
rustyx
3

EDIT: Je viens de voir votre mention RVM dans le post. Certainement la voie à suivre.

Vous allez vouloir installer RVM - c'est un package incroyable qui vous permettra de gérer différents Rubys et différents ensembles de gemmes sur la même machine. Vous pouvez basculer entre les deux en toute simplicité.

Voici le guide d'installation: http://rvm.beginrescueend.com/rvm/install/

Une fois que vous avez tout activé, vous pouvez voir tous vos rubys installés sur la ligne de commande avec avec rvm list, et basculer avec rvm use ruby-head, par exemple. RVM sépare les gemmes de chaque rubis, ce qui devrait vous aider à répondre à votre question.

Sam Ritchie
la source