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.