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.


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.


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!


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


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.


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"


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.


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.


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


"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

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


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.


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!


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


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



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*

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!


0

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


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


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"

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.