A instalação do rvm não está funcionando: “RVM não é uma função”

234

Acabei de instalar o RVM, mas não consigo fazê-lo funcionar. Eu tenho essa linha no final do meu .profilearquivo:

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

Tentei executar source .profilee reiniciar o terminal, mas ainda assim, quando executo rvm use 1.9.2, estou recebendo:

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

Meu sistema é o Ubuntu 11.10.

amorfis
fonte
2
Eu recomendo o rbenv como uma alternativa ao RVM. Não precisa ser carregado no seu shell.
drinor
10
Onde quer que alguém tenha um problema com determinada tecnologia, sempre há um herói em armadura brilhante, com um conselho precioso para jogar fora essa tecnologia e instalar uma alternativa completamente diferente, absolutamente incrível, outra sem desvantagens. É como se eu perguntasse alguma pergunta rubi e que o herói imediatamente veio com "basta instalar java" =)
clérigo

Respostas:

236

Você não está usando um shell de login.

O processo de ativar o sinalizador de login é descrito aqui , e também alguns detalhes sobre o que é um shell de login aqui .

Portanto, você precisa marcar a opção "Executar como shell de login" nas configurações do terminal Gnome. É necessário abrir um novo terminal após esta configuração da bandeira.

Às vezes é necessário para definir o comando para /bin/bash --login.


Para conexões remotas , é importante entender as diferenças entre executar uma sshsessão interativa e executar comandos únicos.

Durante a execução ssh servere o trabalho interativo com o servidor, você está usando o shell de login por padrão e está tudo bem, mas para ssh server "command"você não está usando o shell de login, seria necessário executá-lo ssh server 'bash -lc "command"'.

Qualquer chamada remota pode ter o mesmo problema que executar um comando único com ssh.

mpapis
fonte
4
Qual seria a solução equivalente no mac?
Adam Grant
8
tente rvm get stable --autoe verificar suas configurações de terminais
mpapis
10
fyi: tivemos que iniciar um novo terminal depois de configurar isso.
12/09/12
2
@mpapis Como eu configuro o gnome-terminal para "Executar comando como shell de login" em um servidor remoto para o qual não posso encaminhar o servidor X para minha máquina?
Waseem
12
Para seguir a sugestão de @ mpapis, --autohavia sido preterido em favor de, --auto-dotfilesentão o comando agora é rvm get stable --auto-dotfiles
Mart Van de Ven
432

Você precisa executar o seguinte

$ source ~/.rvm/scripts/rvm

então execute isso

$ type rvm | head -n 1

e se você conseguir

rvm is a function

o problema está resolvido.

Você também precisa executar user$ rvm requirementspara ver os requisitos de dependência do seu sistema operacional

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

Esqueci de mencionar que você precisa inserir esse código em seu arquivo ~ / .bashrc ou ~ / .zshrc e não precisará escrever esse código novamente. Felicidades!

Jorge García
fonte
2
Obrigado. Trabalhou para mim no ubuntu 10.04.
Vekozlov 5/09/12
19
Esta solução funciona apenas na sessão atual do shell. Se você seguir esta solução, precisará repetir essas etapas sempre que fizer logon no console novamente. Uma solução mais permanente é adicionar o seguinte ao arquivo ~ / .bashrc: se test -f ~ / .rvm / scripts / rvm; então ["$ (type -t rvm)" = "function"] || source ~ / .rvm / scripts / rvm fi
Stanley
Isso realmente deve estar na página integração gnome do RVM, muito mais conciso e funcionou como um encanto sobre Nadia hortelã rodando KDE & Cinammon no entanto
k4t434sis
1
E se ainda não for uma função depois de fazer tudo isso?
precisa saber é o seguinte
Se @ solução de Stanley não trabalha, também fazer isso: stackoverflow.com/questions/820517/bashrc-at-ssh-login
Adam Grant
105

Para resolver permanentemente, basta recortar / colar a seguinte linha:

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

De: ~/.bash_profilearquivo

Para: ~/.bashrcarquivo

A razão pela qual isso funciona é que .bashrcé executado sempre que você entra no terminal e .bash_profilecada vez que faz login. É por isso que a solução /bin/bash --loginfunciona, mas você deve fazer isso sempre que entrar no terminal. Dessa forma, você estará definido até o próximo formato e esquecerá tudo isso até lá :)

Haris Krajina
fonte
Como usuário de tela, sempre preciso inserir essa linha em ~/.bashrcvez de ~/.bash_profile.
Ryenus
2
Obrigado! Fiquei extremamente incomodado com o atraso de dois segundos necessário para o gnome entrar. Isso impedirá esse atraso.
Justinpage 31/05
6
Por que a instalação do rvm não faz isso automaticamente?
#
O @mpapis é o gerenciador de lançamento do rvm e ele diz que fazê-lo desta maneira "pode ​​falhar nas sessões X (Fedora 17, se bem me lembro). Eu acho que vou ficar com o `/ bin / bash --login.
Kimbaudi
29

Eu também enfrentei esse problema. Finalmente eu executei esta linha no terminal.

source ~/.rvm/scripts/rvm

O problema está resolvido. Porque essa linha fará da instância do RVM uma função por um tempo específico.

Bastin Robin
fonte
2
Resposta mais simples de todas. basta colocar essa linha no seu ~ / .bashrc e você poderá usar qualquer emulador de terminal.
Nikkolasg
1
Oi - embora esse comando 'conserte' coisas para a sessão em que eu estive, os resultados não foram persistentes e não ajudaram novas (ou outras) sessões a termo. E parece que a área de trabalho também ignora as mudanças. Eu sou "anti-" a coisa do login também porque é baseada em sessão / login. Pessoalmente, quero comparar o mesmo programa com diferentes Ruby-s e versões.
será
1
Você é o verdadeiro MVP. Nada mais funcionou até que eu tentei isso. Eu não me importo se é temporário, só precisava de uma correção.
ian-campbell
Onde está o arquivo de instalação do rvm, portanto, quando você o instala, ele cuida desses e de outros problemas? Eu usei o processo descrito em sua página inicial e passei horas tentando fazê-lo "apenas funcionar". Deve ser algo como "yum install rvm" e tudo está pronto e pronto.
JosephK
21

O último RVM (rvm 1.11.6 (estável)) parou de funcionar no Ubuntu (10.10 - 64 bits - nerd gnat ou o que for) - eu continuava recebendo

"RVM não é uma função, selecionar rubis com 'rvm use ...' não funcionará."

Antes, recebi a mensagem, mas 'rvm 1.9.3-p0@rails321' funcionaria. Agora, não funcionaria - você não podia mudar os conjuntos de pedras preciosas.

Nada funcionou, até que eu encontrei isso - faça desta a ÚLTIMA linha /home/your-name/.bashrc

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

Rod McLaughlin
fonte
2
"rvm fica estável - auto" adicionado a .bash_login [[-s "$ HOME / .rvm / scripts / rvm"]] && fonte "$ HOME / .rvm / scripts / rvm" e o removeu de .bashrc - I adicionado fonte ~ / .bash_login no final de .bashrc e no início de todos os scripts que muda gemsets no meio da corrente
Rod McLaughlin
9

Como você disse, o erro mostrado pode ser o seguinte.

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 dito acima, basta digitar ' / bin / bash --login ' no seu terminal (depois de reiniciar o seu terminal) e digite o comando 'rvm use 1.9.3' (por exemplo) e ele começará a usar a mesma versão.

Basta executar o comando 'ruby -v' para confirmar que o RVM está usando a versão atualizada do Ruby.

Rajesh Omanakuttan
fonte
8

Eu também tive esse problema em uma instalação nova do rvm, e nenhuma das respostas aqui o corrigiu. Indo para o site oficial do rvm, na seção básica, eles têm este comando:

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

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

Você deve alterar a versão 1.9.3 para a versão ruby ​​que realmente deseja, e isso tornará a rvm uma função, independentemente do tipo de shell.

vcanales
fonte
7

mesmo que você tenha aceitado uma resposta, gostaria de sugerir outra maneira .. ~ / .bashrc é carregado antes que qualquer shell seja aberto. Adicione essa linha no final disso e você não precisará de nada disso

kapv89
fonte
"esse login shell coisa" está lá por uma razão, eu fiz muitos testes com fornecimento RVM e é a única maneira que garantias trabalhar sem indetectável e difícil de resolver erros
mpapis
@mpapis Você pode explicar o motivo? De outras respostas, parece que a maioria são muito bem com movendo a linha de arquivo rc
balki
por exemplo, pode falhar nas sessões X (Fedora 17, se bem me lembro), falhar nas sessões rsync ... e mais razões pelas quais não consigo me lembrar agora
mpapis
7

Talvez você possa tentar abaixo:

  • O seu terminal ->
  • Editar ->
  • Preferências do perfil ->
  • Título e Comando ->
  • Marque a opção "Executar comando como um shell de login"
  • Feito
Feuda
fonte
Essa é a solução mais fácil e a correta, pois um shell normal ignora .profile, usar esta opção fará com que ela seja carregada e não precise editar .bashrc.
DWils
6

Execute bash --logine depois execute rvm use 2.0.0.

Gowri Tumma
fonte
4

Abra o Terminal e, em seguida, vá em Editar> Preferências do perfil e, em seguida, vá para a guia " Título e comando " e marque " Executar comando como shell de login ".

Inicialize o Bash e agora você pode instalar o Gems diretamente do terminal sem o uso do sudo e o erro " RVM não é uma função, a seleção de rubis com 'rvm use ...' não funcionará. " Será eliminada.

Felicidades.

ajknzhol
fonte
4

Todas as respostas acima são válidas. Mas quando enfrentei o mesmo problema, a solução foi a seguinte:

  • Atualize o ZSH. (Tentou atualizar diretamente, não funcionou por algum motivo. Portanto, desinstalou e reinstalou a versão atualizada daqui )
  • Defina o shell padrão como zsh (ou seja, se você preferir zsh) usandosudo chsh -s $(which zsh) $USER
  • Verifique se o código a seguir está na parte inferior do seu .zshrcdepois de instalar o RVM mais recente, provavelmente usando o CURL no site oficial do RVM

    [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"
    source ~/.profile
  • PONTO MAIS IMPORTANTE: Verifique se no seu .zshrcarquivo todas as exportações PATHsão anexadas :$PATH. Que eu acredito que foi a raiz dos meus problemas, mesmo depois de seguir as etapas acima.

  • postar isso todos os meus problemas de RVM Não sendo uma função desapareceu. Se ainda assim não funcionar, forneça algum rastreio de erro aqui. Após algumas horas de luta para resolver esse problema, tenho certeza de que devo ter visto todos os erros relacionados.

Espero que ajude. Felicidades!

Vishnu Narang
fonte
sim senhor. Isso funcionou para mim. Não entendi a parte do PONTO MAIS IMPORTANTE, mas funcionou.
Ricbermo 12/01
Quando você tenta instalar o RVM, ele avisa se você tiver export PATH="/usr/bin:". Ele vai pedir para você anexar $PATHa ele. Esta foi a causa de um dos meus problemas. Portanto, todos export PATHdeveriam ter sido $PATHanexados para que, antes da exportação, qualquer que seja a PATHvariável que foi anexada. De qualquer forma, é bom que isso tenha sido útil.
Vishnu Narang
3

Procedimento para instalar o Ruby 1.9.3-p125 no Mac OSX 10.8 Mountain Lion

  1. Você já instalou o XCode mais recente (> = 4.3) e o compilador Objective-C da linha de comando "clang".
  2. Você deve executar o shell "bash" para que este procedimento funcione.
  3. Vá para Preferências do sistema
  4. Clique em "Usuários e Grupos"
  5. Clique no cadeado na parte inferior esquerda do painel e digite sua senha para desbloqueá-lo.
  6. Clique com a tecla Ctrl pressionada no ícone do usuário no painel esquerdo do painel e escolha "Opções avançadas ..."
  7. Altere o Shell de logon para "/ bin / bash"
  8. Feche as preferências
  9. Abra uma janela do terminal (pressione command + barra de espaço e digite "terminal")
  10. Siga as instruções em:

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

Notas:

  • Para instalar o ruby, pode ser necessário especificar o compilador clang:

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

  • Se o RVM reclamar sobre / usr / local / rvm não encontrado, será necessário criar um link:

    $ ln -s / Users / [seu nome de usuário] /. rvm / usr / local / rvm

George Campbell
fonte
Eu acho que eles estão com a P194 agora. Se você instalar o rvm 1.9.3 --with-gcc = clang, obterá a versão mais recente do 1.9.3 automaticamente.
George Campbell
1

Eu recebi o mesmo erro porque já havia instalado a versão antiga do rvm ruby-rvm com o comando apt-get.

Resolvi o problema removendo a linha de script para configurar o antigo rvm no arquivo .bashrc.

Verifique o antigo script de configuração do rvm e execute o arquivo .profile

Ryancheung
fonte
1

Corrigi-o adicionando esta linha ao .bash_profile:

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

Eu tive o mesmo erro, mas nenhuma das soluções nesta página parecia funcionar. Para mim, bastava adicionar o rvmexecutável ao meu caminho:

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

Et voila!

Rafael Bugajewski
fonte
0

Eu tive o mesmo problema e fiz isso no meu .bash_profile e funcionou. source "$HOME/.rvm/scripts/rvm".

Sadiksha Gautam
fonte
0

Para quem vem com o mesmo problema e está usando o lubuntu como eu segui este link :

Você inicia seu terminal com

lxterminal -e "bash -il"

Obrigado a @mpapsis que me indicou a direção certa

nizzin
fonte
Como os links às vezes são transitórios, pode ser uma boa ideia colar uma pequena sinopse na sua resposta, para posteridade.
Marcel Wilson
0

Minha maneira impura de mudar a versão ruby ​​é

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

funciona porque eu tenho a linha abaixo no meu ~ / .bashrc, mas estranhamente não faz o trabalho automaticamente.

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

Tentei conectar-me ao --login no contêiner do docker

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

mas, nesse caso, o contêiner fica aberto em segundo plano e não consigo inserir comandos.

Eu tentei zhc e terminal com a opção "abrir com /bin/bash --login"

Bormat
fonte