Jak „aktywować” inną wersję konkretnego klejnotu?

85

Chcę przełączać się między szynami 2.3.10 jako "aktywny" klejnot dla mojego systemu operacyjnego, abym mógł wywołać go z linii poleceń.

Czy da się to zrobić? Nie używam rvm. Może czas zacząć.

Próbowałem gem install rails --version=2.3.10, ale to tylko upewnia się, że wersja klejnotu jest zainstalowana, a nie umieszcza go /usr/bin/rails.

(Używam już pakietu do moich aplikacji - ale do tej pory nie potrzebowałem żadnej precyzyjnej kontroli nad klejnotami na poziomie systemu operacyjnego)

John Bachir
źródło

Odpowiedzi:

154

Jeśli Twoim problemem jest uruchomienie plików binarnych określonej wersji, to:

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

Ten wzorzec ( gem-binary _gem-version_) działa dla każdego pliku binarnego gem.

Mam nadzieję, że to pomoże.

Daniel Vartanov
źródło
1
Och, to właśnie zaoszczędziło mi długiego weekendu w biurze, dzięki!
Lachlan McD.
2
Wydaje się, że to nie działa w przypadku wszystkich z nich: rackup _1.4.3_ --version<br> Rack 1.1 (Release: 1.4)
Chloe,
1
rackup drukuje tylko wydanie wersji (zobacz Rack.versioni Rack.release github.com/rack/rack/blob/master/lib/rack.rb ). Spróbuj gem install rack --version=1.3 && rackup _1.3.0_ --version, wydrukujeRack 1.1 (Release: 1.3)
Daniel Vartanov
I tak na wszelki wypadek, oto jak to działa:which rackup | xargs cat
Daniel Vartanov
Dzięki Daniel bardzo przydatne
trasa
12

Użyj RVM

RVM umożliwia zarządzanie różnymi wersjami Ruby i Gems. Możesz zainstalować wersję Rubiego, używając na przykład

rvm install 1.9.2

Możesz go następnie użyć za pomocą:

rvm use 1.9.2

Używaj konkretnych klejnotów na projekt z zestawami klejnotów.

Jeśli chcesz zwiększyć przestrzeń nazw, możesz skonfigurować gemsets; katalogi, które będą zawierać określone perełki dla konkretnego projektu.

rvm gemset create myproject

wtedy możesz ich używać w ten sposób:

rvm use 1.9.2@myproject

Automatyzacja

Aby zautomatyzować proces zmiany gemów, plików pop .ruby-version i .ruby-gemset w katalogu głównym projektu. Wstaw wersję Rubiego i nazwę zestawu gemset, którego chcesz użyć w nich, a RVM wybierze właściwy zestaw gemset, kiedy wejdziesz do katalogu projektu.

Instalowanie klejnotów w swoim zestawie kamieni

Zainstaluj klejnoty w swoim zestawie klejnotów w zwykły sposób za pomocą pakietu, jeśli go używasz:

bundle install

lub po prostu używając zwykłego starego:

gem install mygem

Klejnoty zostaną umieszczone w odpowiednim zestawie kamieni.

Alternatywy RVM

Możesz także sprawdzić rbenv, który wykonuje podobną pracę.

superluminium
źródło
1
Problem z rvm polega (jak wspomniałeś) na tym, że obsługuje wersje ruby ​​i wersje gem. rbenv obsługuje tylko wersje ruby ​​i pozwala pakietowi obsługiwać wersje z klejnotami.
daslicious
7

Możesz użyć RVM

Następnie możesz również użyć Bundlera , który dobrze zarządza zależnościami gem.

W Twoim Gemfile

gem "rails", "2.3.10"

i we wniosku

require 'rubygems'
require 'bundler/setup'

i jesteś skończony.

Chubas
źródło
Oprócz tego, jeśli chcesz, aby niektóre skrypty "widziały" tylko wersje zadeklarowane w twoim Gemfile, uruchom je jako "bundle exec <nazwa-skryptów>", np.bundle exec warble
rustyx
3

EDYCJA: Właśnie zobaczyłem wzmiankę o RVM w poście. Zdecydowanie droga do zrobienia.

Będziesz chciał zainstalować RVM - to niesamowity pakiet, który pozwoli ci zarządzać różnymi Rubinami i różnymi zestawami klejnotów na tej samej maszynie. Możesz przełączać się tam iz powrotem z całkowitą łatwością.

Oto przewodnik instalacji: http://rvm.beginrescueend.com/rvm/install/

Gdy wszystko się podniesie, możesz zobaczyć wszystkie zainstalowane ruby ​​w wierszu poleceń , na przykład za pomocą rvm listi przełączać się rvm use ruby-headza pomocą. RVM oddziela klejnoty na każdym rubinie, co powinno pomóc w rozwiązaniu Twojego pytania.

Sam Ritchie
źródło