la instalación de rvm no funciona: "RVM no es una función"

234

Acabo de instalar RVM, pero no puedo hacer que funcione. Tengo esa línea al final de mi .profilearchivo:

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

Traté de ejecutar source .profiley reiniciar el terminal, pero aún así, cuando ejecuto rvm use 1.9.2obtengo:

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

Mi sistema es Ubuntu 11.10.

amorfis
fuente
2
Te recomiendo rbenv como una alternativa a RVM. No necesita cargarse en su shell.
drinor
10
Dondequiera que uno tenga un problema con cierta tecnología, siempre hay un héroe con armadura brillante, con un consejo precioso para tirar esa tecnología e instalar una alternativa completamente diferente, absolutamente increíble, sin inconvenientes. Es como si le hiciera una pregunta de rubí y a ese héroe se le ocurrió "instalar java" =)
Clérigo

Respuestas:

236

No estás utilizando un shell de inicio de sesión.

El proceso para habilitar el indicador de inicio de sesión se describe aquí , también se pueden encontrar algunos detalles sobre qué es un shell de inicio de sesión aquí .

Por lo tanto, debe marcar la opción "Ejecutar como shell de inicio de sesión" en la configuración del terminal Gnome. Se requiere abrir una nueva terminal después de esta configuración de la bandera.

A veces es necesario establecer el comando en /bin/bash --login.


Para las conexiones remotas es importante comprender la diferencia entre ejecutar una sshsesión interactiva y ejecutar comandos individuales.

Mientras se ejecuta ssh servery luego trabaja con el servidor de manera interactiva, está utilizando el shell de inicio de sesión de forma predeterminada y todo está bien, pero para ssh server "command"no utilizar el shell de inicio de sesión, sería necesario ejecutarlo ssh server 'bash -lc "command"'.

Cualquier invocación remota puede tener el mismo problema que ejecutar un solo comando con ssh.

mpapis
fuente
44
¿Cuál sería la solución equivalente en mac?
Adam Grant
8
intente rvm get stable --autoy verifique la configuración de su terminal
mpapis
10
FYI: tuvimos que iniciar una nueva terminal después de configurar esto.
oma
2
@mpapis ¿Cómo configuraría gnome-terminal para "Ejecutar comando como shell de inicio de sesión" en un servidor remoto para el que no puedo reenviar el servidor X a mi máquina?
Waseem
12
Para seguir la sugerencia de @ mpapis, --autohabía quedado en desuso a favor, por --auto-dotfileslo que el comando ahora es rvm get stable --auto-dotfiles
Mart Van de Ven,
432

Necesitas ejecutar lo siguiente

$ source ~/.rvm/scripts/rvm

entonces ejecuta esto

$ type rvm | head -n 1

y si consigues

rvm is a function

el problema esta resuelto.

También debe ejecutar user$ rvm requirementspara ver los requisitos de dependencia para su sistema operativo

Fuente: https://rvm.io/rvm/install/

Olvidé mencionar que necesita poner este código en su archivo ~ / .bashrc o ~ / .zshrc y no necesitará volver a escribir este código. ¡Salud!

Jorge García
fuente
2
Gracias. Me funcionó en Ubuntu 10.04.
vekozlov
19
Esta solución solo funciona en la sesión de shell actual. Si sigue esta solución, tendrá que repetir estos pasos cada vez que vuelva a iniciar sesión en la consola. Una solución más permanente es agregar lo siguiente al archivo ~ / .bashrc: if test -f ~ / .rvm / scripts / rvm; entonces ["$ (type -t rvm)" = "function"] || fuente ~ / .rvm / scripts / rvm fi
Stanley
Esto realmente debería estar en la página de integración de gnomos de RVM, mucho más conciso y funcionó de maravilla en mint nadia ejecutando KDE y Cinammon, no obstante
k4t434sis
1
¿Y si todavía no es una función después de hacer todo esto?
Br
Si la solución de @ Stanley no funciona, también haga esto: stackoverflow.com/questions/820517/bashrc-at-ssh-login
Adam Grant
105

Para resolver esto permanentemente, simplemente corte / pegue la siguiente línea:

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

De: ~/.bash_profilearchivo

Para: ~/.bashrcarchivo

La razón por la que esto funciona es que .bashrcse ejecuta cada vez que ingresa al terminal y .bash_profilecada vez que inicia sesión. Es por eso que la solución /bin/bash --loginfunciona, pero debe hacerlo cada vez que ingresa a la terminal. De esta forma, estará configurado hasta su próximo formato, y olvidará todo esto para entonces :)

Haris Krajina
fuente
Como usuario de la pantalla, siempre necesito poner esta línea en ~/.bashrclugar de ~/.bash_profile.
ryenus
2
¡Gracias! Me molestaron mucho los dos segundos de retraso necesarios para que gnome inicie sesión. Esto evitará ese retraso.
justinpage
66
¿Por qué la instalación de rvm no hace esto automáticamente?
balki 01 de
@mpapis es el administrador de versiones de rvm y dice que hacerlo de esta manera "puede fallar en las sesiones X (Fedora 17 si recuerdo correctamente), falla en las sesiones rsync ... y más razones que no puedo recordar en este momento". Creo que me quedaré con `/ bin / bash --login.
kimbaudi
29

Yo también enfrenté este problema. Finalmente ejecuté esta línea en la terminal.

source ~/.rvm/scripts/rvm

El problema está solucionado. Debido a que esta línea hará que la instancia RVM sea una función para un momento en particular.

Bastin Robin
fuente
2
La respuesta más simple de todas. simplemente ponga esa línea en su ~ / .bashrc y estará listo para usar cualquier emulador de terminal.
Nikkolasg
1
Hola, aunque este comando 'solucionó' las cosas para la sesión de término en la que estaba, los resultados no fueron pegajosos y no ayudaron a nuevas (u otras) sesiones de término. Y parece que el escritorio también ignora los cambios. También soy "anti" en lo que respecta al inicio de sesión porque está basado en sesión / inicio de sesión. Personalmente quiero la posibilidad de comparar el mismo programa con diferentes Ruby-s y versiones.
será
1
Eres el verdadero MVP. Nada más funcionó hasta que probé esto. No me importa si es temporal, solo necesitaba una solución.
ian-campbell
¿Dónde está el archivo de instalación para rvm, de modo que cuando lo instala, se ocupa de este y otros problemas? Utilicé el proceso descrito en su página de inicio, y he pasado horas tratando de que "funcione". Debería ser algo así como "yum install rvm" y todo está hecho y listo para funcionar.
JosephK
21

El último RVM (rvm 1.11.6 (estable)) dejó de funcionar en Ubuntu (10.10 - 64 bit - nerdy gnat o lo que sea) - Seguí recibiendo

"RVM no es una función, seleccionar rubíes con 'uso de rvm ...' no funcionará".

Antes recibí el mensaje, pero 'rvm 1.9.3-p0@rails321' funcionaría. Ahora, no funcionaría, no podrías cambiar gemas en absoluto.

Nada funcionó, hasta que encontré esto, haga de esta la ÚLTIMA línea en /home/your-name/.bashrc

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

Rod McLaughlin
fuente
2
"rvm get stable --auto" agregado a .bash_login [[-s "$ HOME / .rvm / scripts / rvm"]] && source "$ HOME / .rvm / scripts / rvm" y lo eliminó de .bashrc - I fuente agregada ~ / .bash_login al final de .bashrc y al COMIENZO de cualquier script que cambie los conjuntos de gemas en la mitad del flujo
Rod McLaughlin
9

Como dijiste, el error que se muestra podría ser el siguiente.

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.

Como se dijo anteriormente, simplemente escriba ' / bin / bash --login ' en su terminal (después de reiniciar su terminal), luego escriba el comando y 'rvm use 1.9.3' (por ejemplo) y comenzará a usar la misma versión.

Simplemente ejecute el comando 'ruby -v' para confirmar que el RVM está utilizando la versión actualizada de Ruby.

Rajesh Omanakuttan
fuente
8

También tuve este problema en una nueva instalación de rvm, y ninguna de las respuestas aquí lo solucionó. Al ingresar al sitio oficial de rvm, en la sección de conceptos básicos, tienen este comando:

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

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

Debería cambiar 1.9.3 para la versión ruby ​​que realmente desea, y hará que rvm sea una función independientemente del tipo de shell.

vcanales
fuente
7

aunque haya aceptado una respuesta, me gustaría sugerir otra forma ... ~ / .bashrc se carga antes de abrir cualquier shell. Agregue esa línea al final de eso, y no necesita nada de ese shell de inicio de sesión

kapv89
fuente
"esa cosa del shell de inicio de sesión" está ahí por una razón, he hecho muchas pruebas con el abastecimiento de RVM y es la única forma de garantizar el trabajo sin errores indetectables y difíciles de resolver
mpapis 30/03/12
@mpapis ¿Puedes explicar la razón? De otras respuestas, parece que la mayoría está bien con mover la línea al archivo rc
balki
por ejemplo, puede fallar sesiones X (Fedora 17 si no recuerdo mal), se produce un error sesiones rsync ... y más razones que no recuerdo en este momento
mpapis
7

Quizás puedas probar a continuación:

  • Tu terminal ->
  • Editar ->
  • Preferencias de perfil ->
  • Título y comando ->
  • Marque el "Ejecutar comando como un shell de inicio de sesión"
  • Hecho
Feuda
fuente
Esta es la solución más fácil y la correcta, ya que un shell normal omite el perfil. El uso de esta opción hará que se cargue y no necesite editar .bashrc en absoluto.
DWils
6

Corre bash --loginy luego corre rvm use 2.0.0.

Gowri Tumma
fuente
4

Abra la Terminal y luego vaya a Edición> Preferencias de perfil y luego vaya a la pestaña " Título y comando " y marque " Ejecutar comando como shell de inicio de sesión ".

Inicie un Bash y ahora puede instalar Gems directamente desde el terminal sin el uso de sudo y se eliminará el error " RVM no es una función, seleccionar rubíes con 'rvm use ...' no funcionará ".

Salud.

ajknzhol
fuente
4

Todas las respuestas anteriores son válidas. Pero cuando enfrenté el mismo problema, la solución fue la siguiente:

  • Actualiza ZSH. (Intenté actualizar directamente no funciona por alguna razón. Así que desinstalé y reinstalé la versión actualizada desde aquí )
  • Establezca el shell predeterminado como zsh (es decir, si prefiere zsh) usandosudo chsh -s $(which zsh) $USER
  • Asegúrese de que el siguiente código esté en la parte inferior de su .zshrcdespués de haber instalado el último RVM, probablemente usando CURL del sitio oficial de RVM

    [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"
    source ~/.profile
  • PUNTO MÁS IMPORTANTE: Asegúrese de que en su .zshrcarchivo PATHse adjunte cada exportación a :$PATH. Lo cual creo que fue la raíz de mis problemas incluso después de seguir los pasos anteriores.

  • publicar esto todos mis problemas de RVM No ser una función desaparecieron. Si aún no funciona, dé un seguimiento de error aquí. Después de algunas horas de lucha para resolver este problema, estoy seguro de que debo haber visto todos los errores relacionados.

Espero eso ayude. ¡Salud!

Vishnu Narang
fuente
sí señor. Eso funcionó para mí. No entendí la parte del PUNTO MÁS IMPORTANTE, pero funcionó.
Ricbermo
Cuando intentes instalar RVM, te dará una advertencia si es así export PATH="/usr/bin:". Te pedirá que lo añadas $PATH. Esta fue la causa de uno de mis problemas. Por lo tanto, todos export PATHdeberían haberse $PATHagregado para que antes de la exportación, cualquiera que sea la PATHvariable que se haya agregado. De todos modos, bien que esto fue útil.
Vishnu Narang
3

Procedimiento para instalar Ruby 1.9.3-p125 en Mac OSX 10.8 Mountain Lion

  1. Ya ha instalado el último XCode (> = 4.3) y el compilador Objective-C de línea de comando "clang".
  2. Debe ejecutar el shell "bash" para que este procedimiento funcione.
  3. Ir a Preferencias del sistema
  4. Haga clic en "Usuarios y grupos"
  5. Haga clic en el bloqueo en la parte inferior izquierda del panel e ingrese su contraseña para desbloquearlo.
  6. "Ctrl-Click" en su icono de usuario en el panel izquierdo del panel y seleccione "Opciones avanzadas ..."
  7. Cambie el Shell de inicio de sesión a "/ bin / bash"
  8. Cerrar las preferencias
  9. Abra una ventana de terminal (presione comando + barra espaciadora y escriba "terminal")
  10. Siga las instrucciones en:

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

Notas:

  • Para instalar ruby, es posible que deba especificar el compilador clang:

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

  • Si no se encuentra RVM quejas sobre / usr / local / rvm, debe crear un enlace:

    $ ln -s / Users / [su nombre de usuario] /. rvm / usr / local / rvm

George Campbell
fuente
Creo que ahora están a la altura de P194. Si instala rvm 1.9.3 --with-gcc = clang, obtendrá la última versión de 1.9.3 automáticamente.
George Campbell
1

Obtuve el mismo error porque alguna vez instalé la versión anterior de rvm ruby-rvm con el comando apt-get.

Resolví el problema eliminando la línea de script para configurar el antiguo rvm en el archivo .bashrc.

Verifique el antiguo script de configuración de rvm y luego ejecute el código fuente.

ryancheung
fuente
1

Lo arreglé agregando esta línea a .bash_profile:

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

Tuve el mismo error, pero ninguna de las soluciones en esta página parecía funcionar. Para mí fue suficiente agregar el rvmejecutable a mi ruta:

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

Et voila!

Rafael Bugajewski
fuente
0

Tuve el mismo problema e hice esto en mi .bash_profile y funcionó. source "$HOME/.rvm/scripts/rvm".

Sadiksha Gautam
fuente
0

Para aquellos que vienen con el mismo problema y están usando lubuntu como yo, seguí este enlace :

Comienzas tu terminal con

lxterminal -e "bash -il"

Gracias a @mpapsis que me indicó la dirección correcta.

nizzin
fuente
Como los enlaces a veces son transitorios, puede ser una buena idea pegar una pequeña sinopsis en su respuesta, para la posteridad.
Marcel Wilson el
0

Mi manera inmunda de cambiar la versión de ruby ​​es

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

funciona porque tengo la línea debajo de mi ~ / .bashrc pero extrañamente no hace el trabajo automáticamente.

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

Traté de conectarme con --login a mi contenedor acoplable

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

pero en este caso el contenedor permanece abierto en segundo plano y no puedo ingresar comandos.

Intenté zhc y terminal con la opción "abrir con /bin/bash --login"

bormat
fuente