Instalacja Ruby Gem dla konkretnej wersji Ruby w Ubuntu

1

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?

Jan
źródło

Odpowiedzi:

1

Przedmowa RVM (Ruby Version Manager) może być najlepszą długoterminową alternatywą.

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.

Ale jeśli po prostu używasz Ruby 1.9.1 i chcesz, aby została rozpoznana jako domyślna wersja Ruby, wykonaj następujące czynności.

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-alternativesi jak update-alternativeswyjaś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-alternativesponownie, 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-alternativesdo 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
JakeGould
źródło
1

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.

Eappan
źródło
0

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/gemsfolderu. Nie miałem folderu gems w 1.9.1, więc musiałem go ręcznie utworzyć.

Jan
źródło
0

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.

Srikanth Lankapalli
źródło
0

Te gempolecenia 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.

Daniel B
źródło