l'installation RVM ne fonctionne pas: «RVM n'est pas une fonction»

234

Je viens d'installer RVM, mais je ne peux pas le faire fonctionner. J'ai une telle ligne à la fin de mon .profiledossier:

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

J'ai essayé d'exécuter source .profileet de redémarrer le terminal, mais quand je lance, rvm use 1.9.2je reçois:

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

Mon système est Ubuntu 11.10.

amorfis
la source
2
Je vous recommande rbenv comme alternative à RVM. Il n'a pas besoin d'être chargé dans votre shell.
drinor
10
Partout où l'on a un problème avec une certaine technologie, il y a toujours un héros en armure brillante, avec un précieux conseil pour jeter cette technologie et installer une alternative complètement, absolument incroyable une autre sans inconvénients. C'est comme si j'avais posé une question rubis et que le héros a immédiatement proposé "installez simplement java" =)
Clergyman

Réponses:

236

Vous n'utilisez pas de shell de connexion.

Le processus d'activation de l'indicateur de connexion est décrit ici , ainsi que quelques détails sur ce qu'est un shell de connexion peuvent être trouvés ici .

Ainsi, vous devez cocher l'option "Exécuter en tant que shell de connexion" dans les paramètres du terminal Gnome. Il est nécessaire d'ouvrir un nouveau terminal après ce réglage du drapeau.

Parfois, il est nécessaire de définir la commande sur /bin/bash --login.


Pour les connexions à distance , il est important de comprendre la différence entre l'exécution d'une sshsession interactive et l'exécution de commandes uniques.

Lorsque vous exécutez ssh serverpuis travaillez avec le serveur de manière interactive, vous utilisez le shell de connexion par défaut et tout va bien, mais pour ssh server "command"vous n'utilisez pas le shell de connexion et il serait nécessaire de l'exécuter avec ssh server 'bash -lc "command"'.

Tout appel distant peut avoir le même problème que l'exécution d'une seule commande avec ssh.

mpapis
la source
4
Quelle serait la solution équivalente sur Mac?
Adam Grant
8
essayez de rvm get stable --autovérifier les paramètres de votre terminal
mpapis
10
fyi: nous avons dû démarrer un nouveau terminal après avoir réglé cela.
oma
2
@mpapis Comment configurer gnome-terminal sur "Exécuter la commande en tant que shell de connexion" sur un serveur distant pour lequel je ne peux pas transférer le serveur X vers ma machine?
Waseem
12
Pour suivre la suggestion de @ mpapis, --autoavait été déprécié en faveur de --auto-dotfilesla commande est donc rvm get stable --auto-dotfiles
Mart Van de Ven
432

Vous devez exécuter ce qui suit

$ source ~/.rvm/scripts/rvm

puis lancez ceci

$ type rvm | head -n 1

et si vous obtenez

rvm is a function

le problème est résolu.

Vous devez également exécuter user$ rvm requirementspour voir les exigences de dépendance pour votre système d'exploitation

Source: https://rvm.io/rvm/install/

J'ai oublié de mentionner que vous devez mettre ce code dans votre fichier ~ / .bashrc ou ~ / .zshrc et vous n'aurez pas besoin de réécrire ce code. À votre santé!

Jorge García
la source
2
Merci. A travaillé pour moi sur Ubuntu 10.04.
vekozlov
19
Cette solution ne fonctionne que dans la session shell actuelle. Si vous suivez cette solution, vous devrez répéter ces étapes chaque fois que vous vous connecterez à nouveau à la console. Une solution plus permanente consiste à ajouter ce qui suit au fichier ~ / .bashrc: if test -f ~ / .rvm / scripts / rvm; alors ["$ (type -t rvm)" = "fonction"] || source ~ / .rvm / scripts / rvm fi
Stanley
Cela devrait vraiment être sur la page d'intégration des gnomes de RVM, beaucoup plus concis et fonctionnait comme un charme sur nintia à la menthe exécutant KDE et Cinammon néanmoins
k4t434sis
1
Et si ce n'est toujours pas une fonction après avoir fait tout cela?
Br.Bill
Si la solution de @ Stanley ne fonctionne pas, faites-le également: stackoverflow.com/questions/820517/bashrc-at-ssh-login
Adam Grant
105

Pour résoudre définitivement cette ligne juste couper / coller:

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

De: ~/.bash_profilefichier

À: ~/.bashrcfichier

La raison pour laquelle cela fonctionne est qu'il .bashrcest exécuté à chaque fois que vous entrez dans le terminal et à .bash_profilechaque connexion. C'est pourquoi la solution /bin/bash --loginfonctionne, mais vous devez le faire à chaque fois que vous entrez dans le terminal. De cette façon, vous êtes réglé jusqu'à votre prochain format, et vous oublierez tout cela d'ici là :)

Haris Krajina
la source
En tant qu'utilisateur d'écran, j'ai toujours besoin de mettre cette ligne à la ~/.bashrcplace de ~/.bash_profile.
ryenus
2
Merci! J'ai été extrêmement gêné par le délai de deux secondes nécessaire pour que gnome se connecte. Cela évitera ce retard.
justinpage
6
Pourquoi l'installation RVM ne le fait-elle pas automatiquement?
balki
@mpapis est le gestionnaire de versions de rvm et il dit de cette façon "peut échouer les sessions X (Fedora 17 si je me souviens bien), il échoue les sessions rsync ... et plus de raisons que je ne me souviens pas pour le moment". Je pense que je vais m'en tenir à `/ bin / bash --login.
kimbaudi
29

Moi aussi, j'ai fait face à ce problème. Enfin j'ai exécuté cette ligne sur le terminal.

source ~/.rvm/scripts/rvm

Le problème est résolu. Parce que cette ligne fera de l'instance RVM une fonction pour un temps particulier.

Bastin Robin
la source
2
Réponse la plus simple de toutes. il suffit de mettre cette ligne dans votre ~ / .bashrc et vous êtes prêt à utiliser n'importe quel émulateur de terminal.
Nikkolasg
1
Salut - bien que cette commande ait `` corrigé '' les choses pour la session à laquelle j'étais, les résultats n'étaient pas collants et n'ont pas aidé les sessions de session nouvelles (ou autres). Et il semble que le bureau ignore également les changements. Je suis "anti-" la chose de connexion aussi car elle est basée sur une session / connexion. Personnellement, je veux pouvoir comparer le même programme avec différents Ruby-s et versions.
le
1
Vous êtes le vrai mvp. Rien d'autre n'a fonctionné jusqu'à ce que j'essaye. Je me fiche que ce soit temporaire, j'avais juste besoin d'un correctif.
ian-campbell
Où est le fichier d'installation pour rvm, donc lorsque vous l'installez, il s'occupe de cela et d'autres problèmes? J'ai utilisé le processus décrit sur leur page d'accueil et j'ai passé des heures à essayer de le faire "fonctionner". Devrait être quelque chose comme "yum install rvm" et tout est fait et prêt à fonctionner.
JosephK
21

Le dernier RVM (rvm 1.11.6 (stable)) a cessé de fonctionner sur Ubuntu (10.10 - 64 bits - nerdy gnat ou autre) - j'ai continué à recevoir

"RVM n'est pas une fonction, sélectionner des rubis avec 'rvm use ...' ne fonctionnera pas."

Avant, je recevais le message, mais «rvm 1.9.3-p0@rails321» fonctionnerait. Maintenant, cela ne fonctionnerait pas - vous ne pouviez pas du tout changer les gemmes.

Rien n'a fonctionné jusqu'à ce que je trouve cela - faites-en la dernière ligne /home/your-name/.bashrc

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

Rod McLaughlin
la source
2
"rvm get stable --auto" ajouté à .bash_login [[-s "$ HOME / .rvm / scripts / rvm"]] && source "$ HOME / .rvm / scripts / rvm" et supprimé de .bashrc - I ajout de la source ~ / .bash_login à la fin de .bashrc et au DÉBUT de tout script qui modifie les ensembles de gemmes en cours de route
Rod McLaughlin
9

Comme vous l'avez dit, l'erreur indiquée pourrait être la suivante.

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.

Comme indiqué ci-dessus, tapez simplement ' / bin / bash --login ' dans votre terminal (après avoir redémarré votre terminal), puis tapez la commande 'rvm use 1.9.3' (par exemple) et il commencera à utiliser la même version.

Exécutez simplement la commande 'ruby -v' pour confirmer que le RVM utilise la version mise à jour de Ruby.

Rajesh Omanakuttan
la source
8

J'ai eu ce problème aussi sur une nouvelle installation rvm, et aucune des réponses ici ne l'a corrigé. En entrant dans le site officiel de rvm, dans la section des bases, ils ont cette commande:

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

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

Vous devriez changer 1.9.3 pour la version ruby ​​que vous voulez réellement, et cela fera de rvm une fonction quel que soit le type de shell.

vcanales
la source
7

même si vous avez accepté une réponse, je voudrais suggérer une autre façon .. ~ / .bashrc est chargé avant d'ouvrir un shell. Ajoutez cette ligne à la fin de cela, et vous n'avez besoin de rien de ce shell de connexion

kapv89
la source
"cette chose shell de connexion" est là pour une raison, j'ai fait de nombreux tests avec l'approvisionnement RVM et c'est le seul moyen qui garantit un travail sans erreurs indétectables et difficiles à résoudre
mpapis
@mpapis Pouvez-vous expliquer la raison? D'après les autres réponses, il semble que la plupart des utilisateurs
acceptent de
par exemple, il peut échouer les sessions X (Fedora 17 si je me souviens bien), il échoue les sessions rsync ... et plus de raisons que je ne me souviens pas pour le moment
mpapis
7

Vous pouvez peut-être essayer des belows:

  • Votre terminal ->
  • Modifier ->
  • Préférences de profil ->
  • Titre et commande ->
  • Cochez la case "Exécuter la commande en tant que shell de connexion"
  • Terminé
Feuda
la source
C'est la solution la plus simple et la bonne, car un shell normal ignore .profile, l'utilisation de cette option entraînera son chargement et n'aura pas besoin de modifier du tout .bashrc.
DWils
6

Exécutez bash --loginpuis exécutez rvm use 2.0.0.

Gowri Tumma
la source
4

Ouvrez le terminal, puis allez dans Edition> Préférences de profil , puis allez dans l'onglet " Titre et commande " et cochez " Exécuter la commande en tant que shell de connexion ".

Démarrez un Bash et vous pouvez maintenant installer Gems directement à partir du terminal sans utiliser sudo et l'erreur " RVM n'est pas une fonction, la sélection de rubis avec 'rvm use ...' ne fonctionnera pas. " Sera éliminée.

À votre santé.

ajknzhol
la source
4

Toutes les réponses ci-dessus sont valables. Mais lorsque j'ai été confronté au même problème, la solution était la suivante:

  • Mettez à jour ZSH. (J'ai essayé de mettre à jour directement ne fonctionne pas pour une raison quelconque. Donc, version mise à jour désinstallée et réinstallée d' ici )
  • Définissez le shell par défaut sur zsh (c'est-à-dire si vous préférez zsh) en utilisantsudo chsh -s $(which zsh) $USER
  • Assurez-vous que le code suivant se trouve au bas de votre fichier .zshrcaprès avoir installé la dernière version de RVM en utilisant CURL sur le site officiel de RVM

    [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"
    source ~/.profile
  • POINT LE PLUS IMPORTANT: Assurez-vous que dans votre .zshrcfichier, chaque exportation vers PATHest ajoutée :$PATH. Ce qui, je crois, était à l'origine de mes problèmes même après avoir suivi les étapes ci-dessus.

  • postez tous mes problèmes de RVM Ne pas être une fonction a disparu. Si cela ne fonctionne toujours pas, donnez une trace d'erreur ici. Après quelques heures de lutte pour résoudre ce problème, je suis sûr d'avoir dû voir toutes les erreurs liées.

J'espère que ça aide. À votre santé!

Vishnu Narang
la source
Oui monsieur. Cela a fonctionné pour moi. Je n'ai pas compris la partie du point le plus important, mais cela a fonctionné.
Ricbermo
Lorsque vous essayez d'installer RVM, un avertissement s'affichera si vous l'avez fait export PATH="/usr/bin:". Il vous demandera de l'ajouter $PATH. C'était la cause d'un de mes problèmes. Par conséquent, tout export PATHaurait dû être $PATHajouté de sorte qu'avant l'exportation, tout ce que la PATHvariable avait était ajouté. Quoi qu'il en soit, c'est bien que cela ait été utile.
Vishnu Narang
3

Procédure d'installation de Ruby 1.9.3-p125 sur Mac OSX 10.8 Mountain Lion

  1. Vous avez déjà installé le dernier XCode (> = 4.3) et le compilateur Objective-C en ligne de commande "clang".
  2. Vous devez exécuter le shell "bash" pour que cette procédure fonctionne.
  3. Accédez aux Préférences Système
  4. Cliquez sur "Utilisateurs et groupes"
  5. Cliquez sur le verrou en bas à gauche du panneau et entrez votre mot de passe pour le déverrouiller.
  6. "Ctrl-Clic" sur votre icône d'utilisateur dans le volet gauche du panneau et choisissez "Options avancées ..."
  7. Changez le shell de connexion en "/ bin / bash"
  8. Fermez les préférences
  9. Ouvrez une fenêtre de terminal (appuyez sur commande + barre d'espace et tapez "terminal")
  10. Suivez les instructions sur:

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

Remarques:

  • Pour installer ruby, vous devrez peut-être spécifier le compilateur clang:

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

  • Si RVM conteste / usr / local / rvm introuvable, vous devez créer un lien:

    $ ln -s / Users / [votre nom d'utilisateur] /. rvm / usr / local / rvm

George Campbell
la source
Je pense qu'ils sont maintenant à P194. Si vous installez rvm 1.9.3 --with-gcc = clang, vous obtiendrez automatiquement la dernière version de 1.9.3.
George Campbell
1

J'avais la même erreur car j'avais déjà installé l'ancienne version rvm ruby-rvm avec la commande apt-get.

J'ai résolu le problème en supprimant la ligne de script pour configurer l'ancien rvm dans le fichier .bashrc.

Vérifiez l'ancien script de configuration rvm, puis exécutez le fichier source .profile

ryancheung
la source
1

Je l'ai corrigé en ajoutant cette ligne à .bash_profile:

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

J'ai eu la même erreur, mais aucune des solutions de cette page ne semble fonctionner. Pour moi, il suffisait d'ajouter l' rvmexécutable à mon chemin:

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

Et voilà!

Rafael Bugajewski
la source
0

J'ai eu le même problème et je l'ai fait dans mon .bash_profile et cela a fonctionné. source "$HOME/.rvm/scripts/rvm".

Sadiksha Gautam
la source
0

Pour ceux qui viennent avec le même problème et utilisent Lubuntu comme moi, j'ai suivi ce lien :

Vous démarrez votre terminal avec

lxterminal -e "bash -il"

Merci à @mpapsis qui m'a orienté dans la bonne direction

nizzin
la source
Étant donné que les liens sont parfois transitoires, il peut être judicieux de coller un petit synopsis dans votre réponse, pour la postérité.
Marcel Wilson
0

Ma façon impure de changer de version rubis est

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

cela fonctionne parce que j'ai la ligne ci-dessous dans mon ~ / .bashrc mais étrangement, il ne fait pas le travail automatiquement.

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

J'ai essayé de me connecter avec --login à mon conteneur Docker

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

mais dans ce cas, le conteneur reste ouvert en arrière-plan et je ne peux pas entrer de commandes.

J'ai essayé à la fois zhc et terminal avec l'option "ouvrir avec /bin/bash --login"

bormat
la source