installazione rvm non funzionante: "RVM non è una funzione"


234

Ho appena installato RVM, ma non riesco a farlo funzionare. Ho una tale riga alla fine del mio .profilefile:

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

Ho provato a eseguire source .profilee riavviare il terminale, ma ancora quando corro rvm use 1.9.2ottengo:

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

Il mio sistema è Ubuntu 11.10.


2
Ti consiglio rbenv in alternativa a RVM. Non ha bisogno di essere caricato nella tua shell.
drinor,

10
Ovunque uno abbia un problema con una certa tecnologia, c'è sempre un eroe in armatura splendente, con un prezioso consiglio di buttare via quella tecnologia e installare un altro completamente alternativo, assolutamente sorprendente senza alcun inconveniente. È come se avessi fatto qualche domanda sul rubino e quell'eroe ha immediatamente pensato "installa java" =)
Clergyman,

Risposte:


236

Non stai usando una shell di login.

Il processo di abilitazione del flag di login è descritto qui , anche alcuni dettagli su cosa sia una shell di login sono disponibili qui .

Pertanto, è necessario selezionare l'opzione "Esegui come shell di accesso" nelle impostazioni del terminale Gnome. È necessario aprire un nuovo terminale dopo aver impostato la bandiera.

A volte è necessario impostare il comando su /bin/bash --login.


Per le connessioni remote è importante comprendere la differenza tra l'esecuzione della sshsessione interattiva e l'esecuzione di singoli comandi.

Mentre ssh serveresegui e lavori in modo interattivo con il server, stai utilizzando la shell di accesso per impostazione predefinita ed è tutto a posto, ma per ssh server "command"te non stai usando la shell di accesso e sarebbe necessario eseguirla ssh server 'bash -lc "command"'.

Qualsiasi invocazione remota può avere lo stesso problema dell'esecuzione di un singolo comando con ssh.


4
Quale sarebbe la soluzione equivalente su Mac?
Adam Grant,

8
prova a rvm get stable --autocontrollare le impostazioni del tuo terminale
mpapis,

10
a proposito: abbiamo dovuto avviare un nuovo terminale dopo aver impostato questo.
Oma,

2
@mpapis Come impostare gnome-terminal su "Esegui comando come shell di accesso" su un server remoto per il quale non posso inoltrare X server sul mio computer?
Waseem,

12
Seguire il suggerimento di @ mpapis, --autoera stato deprecato in favore di --auto-dotfilescosì il comando ora è rvm get stable --auto-dotfiles
Mart Van de Ven

432

È necessario eseguire quanto segue

$ source ~/.rvm/scripts/rvm

quindi esegui questo

$ type rvm | head -n 1

e se ottieni

rvm is a function

il problema è risolto.

È inoltre necessario eseguire user$ rvm requirementsper visualizzare i requisiti di dipendenza per il proprio sistema operativo

Fonte: https://rvm.io/rvm/install/

Dimentico che devi inserire questo codice nel tuo file ~ / .bashrc o ~ / .zshrc e non dovrai scrivere di nuovo questo codice. Saluti!


2
Grazie. Ha funzionato per me su Ubuntu 10.04.
Vekozlov,

19
Questa soluzione funziona solo nella sessione di shell corrente. Se segui questa soluzione dovrai ripetere questi passaggi ogni volta che accedi nuovamente alla console. Una soluzione più permanente è aggiungere quanto segue al file ~ / .bashrc: if test -f ~ / .rvm / scripts / rvm; quindi ["$ (type -t rvm)" = "function"] || fonte ~ / .rvm / scripts / rvm fi
Stanley,

Questo dovrebbe davvero essere sulla pagina di integrazione dello gnomo di RVM, molto più conciso e ha funzionato come un incantesimo su
Nadia

1
E se non fosse ancora una funzione dopo aver fatto tutto questo?
Br .ill

Se la soluzione di @ Stanley non funziona, fai anche questo: stackoverflow.com/questions/820517/bashrc-at-ssh-login
Adam Grant,

105

Per risolvere definitivamente questo basta tagliare / incollare la seguente riga:

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

Da: ~/.bash_profilefile

A: ~/.bashrcfile

Il motivo per cui funziona è che .bashrcviene eseguito ogni volta che si accede al terminale e .bash_profileogni volta che si accede . Ecco perché la soluzione /bin/bash --loginfunziona, ma devi farlo ogni volta che entri nel terminale. In questo modo sei impostato fino al tuo prossimo formato, e allora dimenticherai tutto questo :)


Come utente dello schermo, devo sempre inserire questa riga ~/.bashrcanziché ~/.bash_profile.
reno

2
Grazie! Sono stato estremamente infastidito dal ritardo di due secondi necessario per il login di gnome. Ciò impedirà tale ritardo.
justinpage

6
Perché l'installazione di rvm non lo fa automaticamente?
balki,

@mpapis è il gestore delle versioni di rvm e dice che farlo in questo modo "può fallire sessioni X (Fedora 17 se ricordo bene), fallisce sessioni rsync ... e altri motivi che non riesco a ricordare in questo momento". Penso che rimarrò solo con `/ bin / bash --login.
Kimbaudi,

29

Anch'io ho affrontato questo problema. Alla fine ho eseguito questa linea sul terminale.

source ~/.rvm/scripts/rvm

Il problema è stato risolto Perché questa linea renderà l'istanza RVM una funzione per un determinato momento.


2
La risposta più semplice di tutte. inserisci quella linea nel tuo ~ / .bashrc e sei a posto con qualsiasi emulatore di terminale.
Nikkolasg,

1
Salve - sebbene questo comando "risolva" le cose per il termine della sessione in cui mi trovavo, i risultati non erano appiccicosi e non aiutavano nuove (o altre) sessioni a termine. E sembra che anche il desktop ignori i cambiamenti. Sono "anti-" anche la cosa di accesso perché è basata su sessione / accesso. Personalmente voglio la possibilità di confrontare lo stesso programma con Ruby e versioni diverse.
sarà il

1
Sei il vero mvp. Nient'altro ha funzionato fino a quando non ho provato questo. Non mi importa se è temporaneo, ho solo bisogno di una soluzione.
ian-campbell,

Dov'è il file di installazione di rvm, quindi quando lo installi si occupa di questo e di altri problemi? Ho usato il processo descritto nella loro home page e ho passato ore a cercare di farlo "funzionare". Dovrebbe essere qualcosa come "yum install rvm" e tutto è fatto e pronto per partire.
JosephK,

21

L'ultima RVM (rvm 1.11.6 (stabile)) ha smesso di funzionare su Ubuntu (10.10 - 64 bit - nerd gnat o altro) - Continuavo a ricevere

"RVM non è una funzione, selezionare rubini con 'rvm use ...' non funzionerà."

Prima ho ricevuto il messaggio, ma "rvm 1.9.3-p0@rails321" avrebbe funzionato. Ora, non funzionerebbe - non potresti assolutamente cambiare le gemme.

Niente ha funzionato, fino a quando non ho trovato questo - rendere questa l'ultima linea /home/your-name/.bashrc

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


2
"rvm get stable --auto" aggiunto a .bash_login [[-s "$ HOME / .rvm / scripts / rvm"]] && source "$ HOME / .rvm / scripts / rvm" e rimosso da .bashrc - I aggiunto fonte ~ / .bash_login alla fine di .bashrc e all'inizio di qualsiasi sceneggiatura che cambi i set di gemme a metà campo
Rod McLaughlin

9

Come hai detto, l'errore mostrato potrebbe essere il seguente.

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.

Come detto sopra, basta digitare ' / bin / bash --login ' nel proprio terminale (dopo aver riavviato il terminale), quindi digitare il comando 'rvm use 1.9.3' (per es.) E inizierà a usare la stessa versione.

Basta eseguire il comando 'ruby -v' per confermare che RVM sta usando la versione aggiornata di Ruby.


8

Ho avuto questo problema anche su una nuova installazione rvm, e nessuna delle risposte qui risolto. Accedendo al sito rvm ufficiale, nella sezione di base, hanno questo comando:

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

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

Dovresti cambiare 1.9.3 per la versione ruby ​​che vuoi veramente, e farà rvm una funzione indipendentemente dal tipo di shell.


7

anche se hai accettato una risposta, vorrei suggerire un altro modo .. ~ / .bashrc viene caricato prima dell'apertura di qualsiasi shell. Aggiungi quella riga alla fine, e non hai bisogno di nessuna delle cose della shell di login


"quella cosa della shell di login" è lì per un motivo, ho fatto molti test con l'approvvigionamento di RVM ed è l'unico modo che garantisce un lavoro senza errori non rilevabili e difficili da risolvere
mpapis

@mpapis Puoi spiegarmi il motivo? Da altre risposte, sembra che la maggior parte
vada

per esempio può fallire le sessioni X (Fedora 17 se ricordo bene), non riesce le sessioni rsync ... e altri motivi che non riesco a ricordare in questo momento
mpapis

7

Forse puoi provare belows:

  • Il tuo terminale ->
  • Modifica ->
  • Preferenze profilo ->
  • Titolo e comando ->
  • Controlla il "Esegui comando come shell di login"
  • Fatto

Questa è la soluzione più semplice e quella corretta, poiché una normale shell salta .profile, l'utilizzo di questa opzione causerà il caricamento e la necessità di non modificare affatto .bashrc.
DWils,


4

Apri il terminale e poi vai a Modifica> Preferenze profilo e poi vai alla scheda " Titolo e comando " e seleziona " Esegui comando come login shell ".

Boot Up a Bash e ora puoi installare Gems direttamente dal terminale senza l'uso di sudo e l'errore " RVM non è una funzione, selezionando rubini con 'rvm use ...' non funzionerà " verrà eliminato.

Saluti.


4

Tutte le risposte sopra sono valide. Ma quando ho affrontato lo stesso problema, la soluzione era la seguente:

  • Aggiorna ZSH. (Ho provato ad aggiornare direttamente non funziona per qualche motivo. Quindi la versione aggiornata disinstallata e reinstallata da qui )
  • Impostare la shell predefinita come zsh (cioè se si preferisce zsh) usandosudo chsh -s $(which zsh) $USER
  • Assicurati che il seguente codice sia in fondo al tuo .zshrcdopo aver installato l'ultima RVM probabilmente usando CURL dal sito RVM ufficiale

    [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"
    source ~/.profile
  • PUNTO PIÙ IMPORTANTE: assicurarsi che nel .zshrcfile PATHsia allegata ogni esportazione :$PATH. Che credo sia stata la radice dei miei problemi anche dopo aver seguito i passaggi precedenti.

  • pubblica questo tutti i miei problemi di RVM Non essere una funzione è andato via. Se continua a non funzionare, dai qualche traccia di errore qui. Dopo alcune ore di difficoltà per risolvere questo problema, sono sicuro di aver visto tutti gli errori correlati.

Spero che sia d'aiuto. Saluti!


si signore. Questo ha funzionato per me. Non ho capito la parte del PUNTO PIÙ IMPORTANTE ma, ha funzionato.
Ricbermo,

Quando si tenta di installare RVM, verrà visualizzato un avviso se lo si è export PATH="/usr/bin:". Ti chiederà di aggiungerlo $PATH. Questa è stata la causa di uno dei miei problemi. Quindi, tutti export PATHavrebbero dovuto $PATHaggiungere in modo che prima dell'esportazione, qualunque cosa la PATHvariabile fosse stata aggiunta. Comunque, bene che questo è stato utile.
Vishnu Narang,

3

Procedura per l'installazione di Ruby 1.9.3-p125 su Mac OSX 10.8 Mountain Lion

  1. Hai già installato l'ultimo XCode (> = 4.3) e il compilatore Objective-C "clang" della riga di comando.
  2. È necessario eseguire la shell "bash" affinché questa procedura funzioni.
  3. Vai a Preferenze di Sistema
  4. Fai clic su "Utenti e gruppi"
  5. Fai clic sul lucchetto nella parte inferiore sinistra del pannello e inserisci la password per sbloccarla.
  6. "Ctrl-clic" sull'icona dell'utente nel riquadro sinistro del pannello e scegliere "Opzioni avanzate ..."
  7. Cambia la Shell di accesso in "/ bin / bash"
  8. Chiudi le preferenze
  9. Apri una finestra del terminale (premi comando + barra spaziatrice e digita "terminale")
  10. Segui le istruzioni su:

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

Appunti:

  • Per installare ruby, potrebbe essere necessario specificare il compilatore clang:

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

  • Se RVM non si trova in / usr / local / rvm, è necessario creare un collegamento:

    $ ln -s / Users / [il tuo nome utente] /. rvm / usr / local / rvm


Penso che siano fino a P194 ora. Se si installa rvm 1.9.3 --with-gcc = clang, si otterrà automaticamente l'ultima versione di 1.9.3.
George Campbell,


1

Ho avuto lo stesso errore perché avevo mai installato la vecchia versione di rvm ruby-rvm con il comando apt-get.

Ho risolto il problema rimuovendo la riga di script per configurare il vecchio rvm nel file .bashrc.

Controllare il vecchio script di configurazione rvm ed eseguire il file .profile di origine



1

L'ho corretto aggiungendo questa riga a .bash_profile:

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

0

Ho avuto lo stesso errore, ma nessuna delle soluzioni in questa pagina sembrava funzionare. Per me è stato sufficiente aggiungere l' rvmeseguibile al mio percorso:

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

Et voilà!


0

Ho avuto lo stesso problema e l'ho fatto nel mio .bash_profile e ha funzionato. source "$HOME/.rvm/scripts/rvm".


0

Per coloro che hanno lo stesso problema e usano Lubuntu come me ho seguito questo link :

Inizi il tuo terminale con

lxterminal -e "bash -il"

Grazie a @mpapsis che mi ha indicato la giusta direzione


Poiché i collegamenti a volte sono transitori, potrebbe essere una buona idea incollare una piccola sinossi nella risposta, per i posteri.
Marcel Wilson,

0

Il mio modo sporco di cambiare la versione di Ruby è

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

funziona perché ho la linea sotto il mio ~ / .bashrc ma stranamente non fa il lavoro automaticamente.

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

Ho provato a connettermi con --login al mio contenitore docker

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

ma in questo caso il contenitore rimane aperto in background e non riesco a inserire i comandi.

Ho provato sia zhc che terminale con l'opzione "apri con /bin/bash --login"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.