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.


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.


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é!


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à :)


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.


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"


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.


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.


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


"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é

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


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é.


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é!


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


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



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*

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à!


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".


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


É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"

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.