Jak ustawić Ruby GEM_HOME i GEM_PATH


10

Jestem NOVICE użytkownikiem Linuksa i używam Linux mięty 17.1

Ponownie zainstalowałem Linux Mint 20 w ciągu ostatnich 3 dni z powodu tego problemu, ale nie mogłem go naprawić

Próbuję zainstalować ruby ​​na szynach za pomocą rvm. Jeśli to się stanie, zacznij nową instalację Linuksa i spróbuj zainstalować klejnoty, ruby ​​i inne rzeczy w jednej sesji terminala, która została pomyślnie zainstalowana, jak tylko zamknę sesję terminala, nie mogę zdobyć tych klejnotów .

Ponownie instalując go ponad 20 razy w ciągu ostatnich 3 dni, szukałem również w Internecie. Powiedziano mi, aby wstawić zmienną środowiskową do /etc/environmentecha ścieżki w tej sesji i wkleiłem ją do /etc/environmentpliku.

nawet teraz nie dostaję zainstalowanych klejnotów

podczas pisania pojawiają rvm -vsię następujące błędy

Warning: PATH set to RVM ruby but GEM_HOME and/or GEM_PATH not set, see:
    https://github.com/wayneeseguin/rvm/issues/3212

Warning! PATH is not properly set up, $GEM_HOME is not set,
         usually this is caused by shell initialization files - check them for 'PATH=...' entries,
         it might also help to re-add RVM to your dotfiles: 'rvm get stable --auto-dotfiles',
         to fix temporarily in this shell session run: 'rvm use ruby-2.2.2'.
rvm 1.26.11 (latest) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]

Jestem bardzo początkującą osobą, jeśli chodzi o pracę z terminalem. Mogę uruchomić kilka podstawowych poleceń do pracy z Ruby.

chciałbym wiedzieć

  1. Jak ustawić ŚCIEŻKĘ
  2. Jak ustawić GEM_HOME
  3. Jak ustawić GEM_PATH

Poniżej moja pełna ścieżka

echo $PATH
/home/sharif/.rvm/gems/ruby-2.2.2/bin:/home/sharif/.rvm/gems/ruby-2.2.2@global/bin:/home/sharif/.rvm/rubies/ruby-2.2.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/sharif/.rvm/bin

pan @mohsen pahlevanzades, czy mogę zapytać, jaki jest sens usunięcia tych dwóch wierszy, jeśli nie masz nic przeciwko, żebym powiedział, pozdrawiam
Amjad

Jeśli dobrze pamiętam, napisałeś pozdrowienia lub dziękuję,
PersianGulf

Odpowiedzi:


18

Wygląda na to, że potrzebujesz polecenia exportdo ustawiania zmiennych środowiskowych:

export PATH=$PATH':/path/to/add'
export GEM_HOME=$HOME/.gem
export GEM_PATH=$HOME/.gem

Będzie to jednak obowiązywać tylko w bieżącej sesji. Aby były bardziej trwałe, dodaj te wiersze do swojego ~/.bashrc.


3

Zwykle oznacza to, że rvm nie jest poprawnie skonfigurowany. Zwykłym błędem jest to, że nie zmodyfikowałeś .bashrcpoprawnie (lub podobnego) lub nie przeładowałeś terminala.

Nie powinieneś ręcznie ustawiać GEM_HOME lub GEM_PATH podczas używania rvm.

Możesz spróbować source ~/.rvm/scripts/rvmsprawdzić, czy to działa.

Możliwe, że jeszcze nie zbudowałeś zestawu. Nie używaj rvm i sudo. Rvm działa najlepiej, gdy jest zainstalowany na koncie, a nie w całym systemie.


Możesz również dodać source ~/.rvm/scripts/rvmdo swojego, ~/.bashrcaby upewnić się, że jest ładowany przy każdym uruchomieniu nowej powłoki.
Niel de Wet,

2

Oto czego się nauczyłem i jak rozwiązałem ten pozornie powszechny problem zmiennych środowiskowych GEM_HOME i GEM_PATH, które nie ustawiły błędu.


tło

Instalacja RVM ma tworzyć zmienne env GEM_HOME i GEM_PATH dla każdego skonfigurowanego RVM i robi to. Ale najwyraźniej istnieje taki błąd, że w niektórych przypadkach zmienne env są ustawiane tylko tymczasowo, a aby je ustawić ponownie, należy ustawić je za pomocą wiersza polecenia. Znalazłem obejście, które powoduje, że zmienne env są trwałe dla RVM.

Obejście

  1. Znajdź swoją aktywną (w RVM) wersję Ruby: Na serwerze produkcyjnym przejdź do katalogu aplikacji i wpisz $rvm list. Spowoduje to wyświetlenie listy zainstalowanych wersji Ruby i które są aktywne dla RVM. Przykład odpowiedzi:

    rvm rubies ruby-1.9.3-p547 [ x86_64 ] => ruby-1.9.3-p551 [ x86_64 ]

Wiem, że RVM używa obecnie wersji ruby-1.9.3-p551. Potrzebujesz tych informacji do następnego kroku.

  1. Uzyskaj ścieżki dla GEM_PATH i GEM_HOME : Robisz to, uruchamiając z wiersza poleceń $rvm use ruby-1.9.3-p551. Następnie nadal z linii komend pokaż wszystkie ustawienia środowiska za pomocą polecenia env. Wyszukaj GEM_PATH i GEM_HOME i skopiuj je w całości do obszaru roboczego.

    GEM_PATH=/usr/local/rvm/gems/ruby-1.9.3-p551:/usr/local/rvm/gems/ruby-1.9.3-p551@global GEM_HOME=/usr/local/rvm/gems/ruby-1.9.3-p551

  2. Ustaw zmienne środowiskowe GEM_HOME i GEM_PATH: Teraz ustaw te zmienne środowiskowe w jednym z wielu plików profilu. Chciałem zachować strukturę izolacji wersji RVM, dlatego zaktualizowałem /profile.d/appspecific.sh o te dwa wiersze:

    export GEM_PATH=/usr/local/rvm/gems/ruby-1.9.3-p551:/usr/local/rvm/gems/ruby-1.9.3-p551@global export GEM_HOME=/usr/local/rvm/gems/ruby-1.9.3-p551


najwyraźniej GEM_HOME i GEM_PATH nie są specyficzne dla RVM?
barlop

2

Odkryłem, że .profile jest ładowany jako ostatni i że umieszcza ~ / .local / bin i ~ / bin na początku ścieżki. Przeniosłem /etc/profile.d/rvm.sh do ~ / .rvm i na samym końcu .profile dodałem „source ~ / .rvm / rvm.sh” i błąd zniknął. Jestem na Linux Mint 18.3. Mam zainstalowane pyenv, rvm i sdkman i wszyscy chcą być ostatnimi. Teraz wszystko działa dobrze. :)

Jeśli jest to system współdzielony, po prostu przenieś plik rvm.sh poza ścieżkę, a każdy inny użytkownik może go pobrać, na przykład z /opt/rvm/rvm.sh.


1

Jak wspomniano @coteyr, nie powinieneś ręcznie ustawiać GEM_HOME i GEM_PATH podczas używania rvm. Jeśli sprawdzisz zmienną środowiskową PATH, uruchamiając, $ echo $PATHa $ HOME / .rvm / bin jest jej częścią, musisz upewnić się, że terminal uruchamia polecenia jako powłokę logowania. Na przykład, jeśli korzystasz z komputera z systemem Ubuntu, otwórz terminal, a następnie przejdź do: menu> Edycja> Preferencje profilu> Polecenie, a następnie wybierz „Uruchom polecenie jako powłokę logowania”

Wydaje się, że jest to stary problem, rvmktóry, jak zakładam, nie jest trywialny do rozwiązania, ponieważ istnieje już od jakiegoś czasu.


1

Aby $GEM_PATHwypełnić mój system (Manjaro / Arch) gems, dodałem do mojego .bashrc:

for _entry in /usr/lib/ruby/gems/*; do
  if [[ -d $_entry ]]; then
    # TODO: Add only if not there already
    export GEM_PATH=$_entry:$GEM_PATH
  fi
done
unset _entry
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.