Wie "aktiviere" ich eine andere Version eines bestimmten Edelsteins?

85

Ich möchte zwischen Rails 2.3.10 als "aktives" Juwel für mein Betriebssystem wechseln, damit ich es über die Befehlszeile aufrufen kann.

Ist das möglich? Ich benutze kein RVM. Vielleicht ist es Zeit zu beginnen.

Ich habe es versucht gem install rails --version=2.3.10, aber das stellt nur sicher, dass die Version des Edelsteins installiert ist, es setzt es nicht ein /usr/bin/rails.

(Ich verwende Bundler bereits für meine Apps - benötige aber bis jetzt keine genaue Kontrolle über Edelsteine ​​auf Betriebssystemebene.)

John Bachir
quelle

Antworten:

154

Wenn Ihr Problem darin besteht, Binärdateien einer bestimmten Version auszuführen, dann:

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

Dieses Muster ( gem-binary _gem-version_) funktioniert für jede Edelstein-Binärdatei.

Ich hoffe es hilft.

Daniel Vartanov
quelle
1
Oh, das hat mir gerade ein langes Wochenende im Büro erspart, danke!
Lachlan McD.
2
Das scheint nicht für alle zu funktionieren: rackup _1.4.3_ --version<br> Rack 1.1 (Release: 1.4)
Chloe
1
Rackup druckt nur die Release-Version (siehe Rack.versionund Rack.release github.com/rack/rack/blob/master/lib/rack.rb ). Versuchen Sie gem install rack --version=1.3 && rackup _1.3.0_ --version, es wird gedrucktRack 1.1 (Release: 1.3)
Daniel Vartanov
Und nur für den Fall, hier ist, wie es funktioniert:which rackup | xargs cat
Daniel Vartanov
Danke Daniel sehr nützlich
Route
12

Verwenden Sie RVM

Mit RVM können Sie verschiedene Versionen von Ruby und Gems verwalten. Sie können beispielsweise eine Version von Ruby installieren

rvm install 1.9.2

Sie können es dann verwenden mit:

rvm use 1.9.2

Verwenden Sie pro Edelstein pro Edelstein bestimmte Edelsteine.

Wenn Sie weitere Namespaces wünschen, können Sie Gemsets einrichten. Verzeichnisse, die bestimmte Edelsteine ​​für ein bestimmtes Projekt enthalten.

rvm gemset create myproject

dann können Sie sie wie folgt verwenden:

rvm use 1.9.2@myproject

Automatisierung

Um den Prozess des Wechselns von Gems zu automatisieren, fügen Sie die Dateien .ruby-version und .ruby-gemset in Ihr Projektstammverzeichnis ein. Geben Sie die Version von Ruby und den Namen des Gemset ein, das Sie in ihnen verwenden möchten, und RVM wählt das richtige Gemset aus, wenn Sie es in Ihr Projektverzeichnis aufnehmen.

Installieren von Edelsteinen in Ihrem Gemset

Installieren Sie Ihre Edelsteine ​​wie gewohnt mit Bundler in Ihrem Gemset, wenn Sie es verwenden:

bundle install

oder einfach mit dem normalen alten:

gem install mygem

Die Edelsteine ​​werden in das richtige Gemset passen.

RVM-Alternativen

Vielleicht möchten Sie auch rbenv ausprobieren, das ähnliche Aufgaben erledigt.

überleuchtet
quelle
1
Problem mit rvm ist (wie Sie erwähnt haben), dass es Ruby-Versionen und Gem-Versionen behandelt. rbenv behandelt nur Ruby-Versionen und lässt Bundler die Edelsteinversionen handhaben.
daslicious
7

Sie können RVM verwenden

Anschließend können Sie auch Bundler verwenden , mit dem Edelsteinabhängigkeiten problemlos verwaltet werden.

In deinem Gemfile

gem "rails", "2.3.10"

und in Ihrer Bewerbung

require 'rubygems'
require 'bundler/setup'

und du bist fertig.

Chubas
quelle
Wenn Sie möchten, dass einige Skripte nur die in Ihrer Gemfile deklarierten Versionen "sehen", führen Sie sie außerdem als "bundle exec < bundle exec warble
Skriptname
3

EDIT: Hab gerade deine RVM Erwähnung in der Post gesehen. Auf jeden Fall der richtige Weg.

Sie werden RVM installieren wollen - es ist ein erstaunliches Paket, mit dem Sie verschiedene Rubys und verschiedene Edelsteinsätze auf demselben Computer verwalten können. Sie können ganz einfach hin und her wechseln.

Hier ist die Installationsanleitung: http://rvm.beginrescueend.com/rvm/install/

Sobald Sie alles aufgerichtet haben, können Sie alle installierten Rubine in der Befehlszeile mit beispielsweise anzeigen rvm listund mit wechseln rvm use ruby-head. RVM hält die Edelsteine ​​auf jedem Rubin getrennt, was bei Ihrer Frage helfen sollte.

Sam Ritchie
quelle