instalacja rvm nie działa: „RVM nie jest funkcją”


234

Właśnie zainstalowałem RVM, ale nie mogę go uruchomić. Mam taką linię na końcu mojego .profilepliku:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"

Próbowałem uruchomić source .profilei ponownie uruchomić terminal, ale mimo to po uruchomieniu rvm use 1.9.2otrzymuję:

RVM is not a function, selecting rubies with 'rvm use ...' will not work.

Mój system to Ubuntu 11.10.


2
Polecam ci rbenv jako alternatywę dla RVM. Nie trzeba go ładować do powłoki.
drinor

10
Gdziekolwiek ma się problem z pewną technologią, zawsze jest bohater w lśniącej zbroi, z cenną radą, aby odrzucić tę technologię i zainstalować całkowicie alternatywną, absolutnie niesamowitą kolejną bez żadnych wad. To tak, jakbym zadał rubinowe pytanie, a ten bohater natychmiast wymyślił „po prostu zainstaluj java” =)
Clergyman,

Odpowiedzi:


236

Nie używasz powłoki logowania.

Proces umożliwiający flagę logowania opisana jest tutaj również kilka szczegółów na temat tego, co jest powłoką zgłoszeniową można znaleźć tutaj .

Dlatego musisz zaznaczyć opcję „Uruchom jako powłokę logowania” w ustawieniach terminalu Gnome. Wymagane jest otwarcie nowego terminala po tym ustawieniu flagi.

Czasami konieczne jest ustawienie polecenia na /bin/bash --login.


W przypadku połączeń zdalnych ważne jest, aby zrozumieć różnicę między uruchamianiem sshsesji interaktywnej a wykonywaniem pojedynczych poleceń.

Podczas pracy, ssh servera następnie interaktywnej pracy z serwerem domyślnie używasz powłoki logowania i wszystko jest w porządku, ale ponieważ ssh server "command"nie używasz powłoki logowania i konieczne będzie jej uruchomienie ssh server 'bash -lc "command"'.

Każde zdalne wywołanie może mieć taki sam problem jak wykonanie pojedynczego polecenia za pomocą ssh.


4
Jakie byłoby równoważne rozwiązanie na Macu?
Adam Grant

8
spróbuj rvm get stable --autosprawdzić ustawienia terminala
mpapis,

10
fyi: musieliśmy uruchomić nowy terminal po ustawieniu tego.
oma

2
@mpapis Jak ustawić gnome-terminal na „Uruchom polecenie jako powłoka logowania” na zdalnym serwerze, dla którego nie mogę przekazać X serwera na mój komputer?
Waseem

12
Aby śledzić @ sugestią mpapis męska, --autozostała zastąpiona --auto-dotfileswięc komenda jest teraz rvm get stable --auto-dotfiles
Mart Van de Ven

432

Musisz uruchomić następujące

$ source ~/.rvm/scripts/rvm

następnie uruchom to

$ type rvm | head -n 1

a jeśli dostaniesz

rvm is a function

problem jest rozwiązany.

Musisz także uruchomić, user$ rvm requirementsaby zobaczyć wymagania dotyczące zależności dla systemu operacyjnego

Źródło: https://rvm.io/rvm/install/

Zapomniałem wspomnieć, że musisz umieścić ten kod w swoim pliku ~ / .bashrc lub ~ / .zshrc i nie będziesz musiał ponownie pisać tego kodu. Twoje zdrowie!


2
Dzięki. Pracowałem dla mnie na Ubuntu 10.04.
vekozlov

19
To rozwiązanie działa tylko w bieżącej sesji powłoki. Jeśli zastosujesz się do tego rozwiązania, będziesz musiał powtórzyć te kroki przy każdym ponownym logowaniu do konsoli. Trwalszym rozwiązaniem jest dodanie do pliku ~ / .bashrc:: test -f ~ / .rvm / scripts / rvm; następnie ["$ (type -t rvm)" = "funkcja"] || źródło ~ / .rvm / scripts / rvm fi
Stanley

To naprawdę powinno być na stronie integracji gnomów RVM, o wiele bardziej zwięzłe i działało jak urok na miętowej nadii z uruchomionymi KDE i Cinammon
k4t434sis

1
A co, jeśli po wykonaniu tego wszystkiego nadal nie będzie to funkcją?
Br.Bill 19.04.13

Jeśli rozwiązanie @ Stanleya nie działa, zrób to również: stackoverflow.com/questions/820517/bashrc-at-ssh-login
Adam Grant

105

Aby trwale rozwiązać ten problem, po prostu wytnij / wklej następujący wiersz:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

Z: ~/.bash_profileplik

Do: ~/.bashrcplik

Powodem tego jest to, że .bashrcjest wykonywany przy każdym wejściu do terminalu i przy .bash_profilekażdym logowaniu. Dlatego rozwiązanie /bin/bash --logindziała, ale musisz to robić przy każdym wejściu do terminalu. W ten sposób jesteś ustawiony do następnego formatu i do tego czasu wszystko zapomnisz :)


Jako użytkownik ekranu zawsze muszę wstawiać tę linię ~/.bashrczamiast ~/.bash_profile.
ryenus

2
Dzięki! Byłem bardzo zaniepokojony dwusekundowym opóźnieniem niezbędnym do zalogowania się gnoma. Zapobiegnie to opóźnieniu.
justinpage

6
Dlaczego instalacja rvm nie robi tego automatycznie?
balki

@mpapis jest menedżerem wydań dla rvm i mówi, że zrobienie tego w ten sposób „może zawieść sesje X (Fedora 17, jeśli dobrze pamiętam), nie powiedzie się sesja rsync ... i więcej powodów, których nie mogę teraz przypomnieć”. Myślę, że po prostu pozostanę przy `/ bin / bash --login.
kimbaudi,

29

Ja też napotkałem ten problem. Wreszcie wykonałem tę linię na terminalu.

source ~/.rvm/scripts/rvm

Problem został naprawiony. Ponieważ ta linia sprawi, że instancja RVM będzie działać przez określony czas.


2
Najprostsza odpowiedź ze wszystkich. po prostu wstaw tę linię do ~ / .bashrc i możesz korzystać z dowolnego emulatora terminala.
Nikkolasg,

1
Cześć - chociaż to polecenie „naprawiło” rzeczy dla sesji terminowej, w której byłem, wyniki nie były lepkie i nie pomogły nowym (lub innym) sesjom terminowym. I wygląda na to, że pulpit również nie zna zmian. Jestem też „przeciwny” logowaniu, ponieważ opiera się na sesji / logowaniu. Osobiście chcę mieć możliwość porównania tego samego programu z różnymi Ruby i wersjami.
będzie

1
Jesteś prawdziwym mvp. Nic innego nie działało, dopóki tego nie spróbowałem. Nie obchodzi mnie, czy to tymczasowe, potrzebowałem tylko poprawki.
ian-campbell

Gdzie jest plik instalacyjny dla rvm, więc kiedy go instalujesz, zajmuje się tym i innymi problemami? Wykorzystałem proces opisany na ich stronie głównej i spędziłem godziny próbując sprawić, by „po prostu działał”. Powinno być coś w stylu „yum install rvm” i wszystko jest gotowe i gotowe.
JosephK

21

Najnowszy RVM (rvm 1.11.6 (stabilny)) przestał działać na Ubuntu (10.10 - 64-bit - nerdy komar lub cokolwiek innego) - ciągle otrzymywałem

„RVM nie jest funkcją, wybór rubinów z użyciem„ rvm use ... ”nie będzie działał.”

Wcześniej dostałem wiadomość, ale „rvm 1.9.3-p0@rails321” będzie działać. Teraz to nie zadziała - nie można w ogóle zmienić zestawów klejnotów.

Nic nie działało, dopóki tego nie znalazłem - uczyń to OSTATNIM wierszem /home/your-name/.bashrc

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"


2
Dodano „rvm get stable --auto” do .bash_login [[-s "$ HOME / .rvm / scripts / rvm"]] i& source "$ HOME / .rvm / scripts / rvm" i usunąłem go z .bashrc - I dodano źródło ~ / .bash_login na końcu .bashrc i na POCZĄTKU dowolnego skryptu, który zmienia zestawy gemów w środkowym nurcie
Rod McLaughlin

9

Jak powiedziałeś, pokazany błąd może być następujący.

RVM is not a function, selecting rubies with 'rvm use ...' will not work.

You need to change your terminal emulator preferences to allow login shell.
Sometimes it is required to use `/bin/bash --login` as the command. 
Please visit https://rvm.io/integration/gnome-terminal/ for a example.

Jak wspomniano powyżej, po prostu wpisz „ / bin / bash --login ” w swoim terminalu (po ponownym uruchomieniu terminalu), a następnie wpisz polecenie „rvm use 1.9.3” (na przykład), a zacznie on używać tej samej wersji.

Wystarczy wykonać polecenie „ruby -v”, aby potwierdzić, że RVM używa zaktualizowanej wersji Ruby.


8

Miałem ten problem również przy świeżej instalacji RVM i żadna z odpowiedzi tutaj nie rozwiązała go. Przechodząc do oficjalnej strony rvm, w sekcji podstawowej, mają następującą komendę:

# z http://rvm.io/rvm/basics

source $ (rvm 1.9.3 do rvm env --path)

Powinieneś zmienić 1.9.3 dla wersji ruby, którą naprawdę chcesz, a to sprawi, że rvm stanie się funkcją niezależnie od typu powłoki.


7

nawet jeśli zaakceptowałeś odpowiedź, chciałbym zasugerować inny sposób .. ~ / .bashrc jest ładowany przed otwarciem jakiejkolwiek powłoki. Dodaj tę linię na końcu, a nie potrzebujesz żadnej powłoki powłoki


„że powłoka logowania rzeczą” jest tam nie bez powodu, ja zrobiłem wiele testów z RVM pozyskiwania i jest to jedyny sposób, który gwarantuje pracę bez niewykrywalny i trudno rozwiązać błędy
mpapis

@mpapis Czy możesz wyjaśnić przyczynę? Z innych odpowiedzi, wygląda na to, że większość jest w porządku z przeniesieniem linii do pliku rc
balki

na przykład może zawieść sesje X (Fedora 17, jeśli dobrze pamiętam), zawiedzie sesje rsync ... i więcej powodów, których nie mogę teraz przypomnieć
mpapis,

7

Może możesz wypróbować poniżej:

  • Twój terminal ->
  • Edytuj ->
  • Preferencje profilu ->
  • Tytuł i polecenie ->
  • Zaznacz „Uruchom polecenie jako powłokę logowania”
  • Gotowe

Jest to najłatwiejsze i poprawne rozwiązanie, ponieważ normalna powłoka pomija plik .profile, użycie tej opcji spowoduje, że się załaduje i nie będzie musiał w ogóle edytować .bashrc.
DWils,


4

Otwórz terminal, a następnie wybierz Edycja> Preferencje profilu, a następnie przejdź do zakładki „ Tytuł i polecenie ” i zaznacz „ Uruchom polecenie jako powłoka logowania ”.

Uruchom Bash, a teraz możesz zainstalować Klejnoty bezpośrednio z terminala bez użycia sudo, a błąd „ RVM nie jest funkcją, wybór rubinów z użyciem„ użycia rvm ... ”nie będzie działać. ” Zostanie wyeliminowany.

Twoje zdrowie.


4

Wszystkie powyższe odpowiedzi są prawidłowe. Ale gdy napotkałem ten sam problem, rozwiązanie było następujące:

  • Zaktualizuj ZSH. (Próbowałem zaktualizować bezpośrednio, ale z jakiegoś powodu nie działa. Więc odinstalowałem i ponownie zainstalowałem zaktualizowaną wersję tutaj )
  • Ustaw domyślną powłokę jako zsh (tzn. Jeśli wolisz zsh) używającsudo chsh -s $(which zsh) $USER
  • Upewnij się, że poniższy kod znajduje się na dole .zshrcpo zainstalowaniu najnowszej RVM, prawdopodobnie używając CURL z oficjalnej strony RVM

    [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"
    source ~/.profile
  • NAJWAŻNIEJSZY PUNKT: Upewnij się, że w Twoim .zshrcpliku PATHdołączony jest każdy eksport do :$PATH. Który uważam za źródło moich problemów, nawet po wykonaniu powyższych kroków.

  • opublikuj to, wszystkie moje problemy z RVM Brak bycia funkcją zniknął. Jeśli nadal nie działa, podaj tutaj ślad błędu. Po kilku godzinach walki o rozwiązanie tego problemu jestem pewien, że widziałem wszystkie powiązane błędy.

Mam nadzieję, że to pomoże. Twoje zdrowie!


tak jest. To działało dla mnie. Nie zrozumiałem NAJWAŻNIEJSZEJ PUNKTU, ale działało.
Ricbermo

Gdy spróbujesz zainstalować RVM, wyświetli ostrzeżenie, jeśli masz export PATH="/usr/bin:". Poprosi Cię o dołączenie $PATHdo niego. To była przyczyna jednego z moich problemów. Dlatego każdy export PATHpowinien był $PATHdołączyć, aby przed eksportem PATHdołączona była dowolna zmienna. W każdym razie dobrze, że to było pomocne.
Wisznu Narang,

3

Procedura instalacji Ruby 1.9.3-p125 na Mac OSX 10.8 Mountain Lion

  1. Zainstalowałeś już najnowszy XCode (> = 4.3), a kompilator Objective-C w wierszu poleceń „clang”.
  2. Aby ta procedura działała, musisz uruchomić powłokę „bash”.
  3. Przejdź do Preferencji systemowych
  4. Kliknij „Użytkownicy i grupy”
  5. Kliknij blokadę w lewym dolnym rogu panelu i wprowadź hasło, aby je odblokować.
  6. „Kliknij i przytrzymaj klawisz Ctrl” na ikonie użytkownika w lewym panelu panelu i wybierz „Opcje zaawansowane ...”
  7. Zmień powłokę logowania na „/ bin / bash”
  8. Zamknij preferencje
  9. Otwórz okno terminala (naciśnij polecenie + spacja i wpisz „terminal”)
  10. Postępuj zgodnie z instrukcjami na:

http://www.frederico-araujo.com/2011/07/30/installing-rails-on-os-x-lion-with-homebrew-rvm-and-mysql/

Uwagi:

  • Aby zainstalować Ruby, może być konieczne określenie kompilatora clang:

    $ rvm install 1.9.3p125 --with-gcc = clang

  • Jeśli RVM zajmuje się / usr / local / rvm nie znaleziono, musisz utworzyć link:

    $ ln -s / Users / [twoja nazwa użytkownika] /. rvm / usr / local / rvm


Myślę, że teraz są w wersji P194. Jeśli wykonasz rvm zainstaluj 1.9.3 --with-gcc = clang, automatycznie otrzymasz najnowszą wersję 1.9.3.
George Campbell


1

Wystąpił ten sam błąd, ponieważ kiedykolwiek instalowałem starą wersję rvm ruby-rvm za pomocą polecenia apt-get.

Rozwiązałem problem, usuwając wiersz skryptu, aby skonfigurować stary RVM w pliku .bashrc.

Sprawdź stary skrypt konfiguracyjny rvm, a następnie uruchom źródłowy plik .profile



1

Naprawiłem to, dodając tę ​​linię do .bash_profile:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

0

Miałem ten sam błąd, ale żadne z rozwiązań na tej stronie nie działało. Dla mnie wystarczyło dodać rvmplik wykonywalny do mojej ścieżki:

PATH=$PATH:/usr/local/rvm/bin/

Zrobione!


0

Miałem ten sam problem i zrobiłem to w moim .bash_profile i zadziałało. source "$HOME/.rvm/scripts/rvm".


0

Dla tych, którzy mają ten sam problem i używają lubuntu jak ja, skorzystałem z tego linku :

Zaczynasz swój terminal od

lxterminal -e "bash -il"

Dziękuję @mpapsis, który wskazał mi właściwy kierunek


Ponieważ linki są czasami przejściowe, dobrym pomysłem może być wklejenie krótkiego streszczenia w swojej odpowiedzi, dla potomności.
Marcel Wilson

0

Mój nieczysty sposób na zmianę wersji ruby ​​to

rvm alias create default ruby-2.2.3 && source ~/.bashrc && rvm list

działa, ponieważ mam poniżej linię w moim ~ / .bashrc, ale co dziwne, nie wykonuje tego automatycznie.

[[ -s "/usr/local/rvm/bin/rvm" ]] && source "/usr/local/rvm/bin/rvm"

Próbowałem połączyć się z --login do mojego kontenera dokera

docker run -it imagename `/bin/bash --login`

ale w tym przypadku kontener pozostaje otwarty w tle i nie mogę wprowadzać poleceń.

Próbowałem zarówno zhc, jak i terminal z opcją „otwórz za pomocą /bin/bash --login

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.