Mam Ruby 1.8 i Ruby 1.9.1 na moim systemie operacyjnym Ubuntu. Kiedy to robię gem install php_http_build_query
, instaluje klejnot do Rubiego 1.8. Jak mogę go zainstalować w Ruby 1.9.1?
Wierzę, że znam twój scenariusz, ponieważ byłem tam wcześniej, gdy korzystałem z Ubuntu 12.04. Wcześniej, po przejściu przez te obręcze, dowiedziałem się, że najlepszym sposobem zarządzania Ruby w systemie jest użycie RVM (Ruby Version Manager) . To nie jest część oficjalnej konfiguracji menedżera pakietów Ubuntu / Debiana, ale jeśli poważnie myślisz o rozwoju Rubiego, RVM jest najlepszym sposobem na skonfigurowanie i używanie wielu wersji Ruby bez konfliktu.
Powiedziawszy to, jeśli jesteś w konfiguracji, w której RVM nie pasuje do twoich potrzeb lub wolisz pozostać przy Ruby 1.9.1, przeczytaj…
Zakładam więc, że zainstalowałeś Ruby 1.8 za pośrednictwem domyślnego repozytorium w Ubuntu 12.04, a następnie - po fakcie - uświadomiłeś sobie, że potrzebujesz Ruby 1.9.1, więc zainstalowałeś go za pomocą polecenia takiego jak to:
sudo aptitude install ruby1.9.1 ruby1.9.1-dev \
rubygems1.9.1 irb1.9.1 ri1.9.1 rdoc1.9.1 \
build-essential libopenssl-ruby1.9.1 \
libssl-dev zlib1g-dev
To sprawi , że Ruby 1.9.1 zostanie zainstalowany w twoim systemie, ale nie spowoduje to, że Ruby 1.9.1 stanie się domyślnym. Kluczem do uzyskania tego zestawu jest użycie update-alternatives
i jak update-alternatives
wyjaśnia oficjalna strona man:
Możliwe jest zainstalowanie kilku programów spełniających te same lub podobne funkcje w jednym systemie w tym samym czasie. Na przykład wiele systemów ma kilka edytorów tekstu zainstalowanych jednocześnie. Daje to wybór użytkownikom systemu, umożliwiając każdemu korzystanie z innego edytora, jeśli jest to pożądane, ale utrudnia programowi dokonanie dobrego wyboru, aby edytor mógł wywołać, jeśli użytkownik nie określił określonej preferencji.
System alternatyw Debiana ma na celu rozwiązanie tego problemu. Ogólna nazwa w systemie plików jest współdzielona przez wszystkie pliki zapewniające wymienną funkcjonalność. System alternatyw i administrator systemu wspólnie określają, do którego rzeczywistego pliku odwołuje się ta nazwa ogólna.
W tym przypadku są trzy kroki, które musisz wykonać, aby Ruby 1.9.1 został poprawnie rozpoznany jako domyślny Ruby w systemie.
Najpierw uruchom to polecenie:
sudo update-alternatives --install /usr/bin/ruby ruby /usr/bin/ruby1.9.1 400 \
--slave /usr/share/man/man1/ruby.1.gz ruby.1.gz \
/usr/share/man/man1/ruby1.9.1.1.gz \
--slave /usr/bin/ri ri /usr/bin/ri1.9.1 \
--slave /usr/bin/irb irb /usr/bin/irb1.9.1 \
--slave /usr/bin/rdoc rdoc /usr/bin/rdoc1.9.1
Następnie uruchom update-alternatives
ponownie, aby wybrać interpreter Ruby. Zmienia to również dowiązania symboliczne dla podstawowych elementów Ruby:
sudo update-alternatives --config ruby
Dokonaj wyboru, a następnie przejdź update-alternatives
do powiązanych ze sobą rubinowych GEM:
sudo update-alternatives --config gem
Na koniec potwierdź, że wersja Ruby została zaktualizowana w ten sposób:
ruby --version
Użyj bezwzględnej ścieżki, aby zainstalować konkretną wersję klejnotu do określonej wersji ruby. np /opt/sensu/embedded/bin/gem install vmstat
.
ruby -v
ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-linux]
/opt/sensu/embedded/bin/ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
Mimo że moją domyślną wersją jest ruby 1.9.3p392, mogę zainstalować gems specyficzne dla ruby 2.3.0p0.
Nie najlepsze rozwiązanie, ale jestem w pośpiechu. Poszedłem do /var/lib/gems/1.8/gems/
folderu i skopiowałem zawartość do /var/lib/gems/1.9.1/gems
folderu. Nie miałem folderu gems w 1.9.1, więc musiałem go ręcznie utworzyć.
Polecenie Gem jest powiązane z zainstalowaną wersją Ruby.
Gem for Ruby 1.8 różni się od gem for ruby 1.9.
Jeśli więc twoja ścieżka wskazuje na 1.8, polecenie gem zainstaluje klejnot w ścieżce odpowiadającej 1.8.
Rozwiązanie: Szybki i prosty sposób polega na zmianie ścieżki ruby w zmiennej środowiskowej na 1.9 i zrobieniu instalacji gem.
Uwaga: Jeśli potrzebujesz Ruby 1.8, musisz ponownie zmienić ścieżkę. Również klejnot musi być zainstalowany dla każdej wersji Ruby oddzielnie w wyżej wymieniony sposób.
Te gem
polecenia są również z nazwy pliku dla poszczególnych wersji. Spójrz na przykład na ten pakiet : Zawiera gem1.8
. Oznacza to, że możesz kierować na wybraną wersję Ruby, niezależnie od domyślnej wersji Ruby systemu.