É também isso que faz do RVM uma ferramenta tão boa. Isso permitiria que você tivesse um conjunto separado de gemas para cada um desses projetos, para que você não tivesse que se preocupar com isso acontecendo novamente.
Rm-rf
Respostas:
84
Usar bundle execé o caminho certo para fazer isso.
Basicamente, o que está acontecendo é que você atualizou o rake para 0.9.2, que agora entra em conflito com a versão especificada no seu Gemfile. Anteriormente, a versão mais recente de rakevocê correspondia à versão do seu Gemfile, portanto, você não recebia nenhum aviso ao usá-lo rake.
Yehuda Katz (um dos desenvolvedores originais do Bundler) explica tudo nesta postagem do blog .
Para evitar digitar bundle exec ...o tempo todo, você pode configurar um alias ou função em seu shell para os comandos que normalmente usa com o Bundler. Por exemplo, é isso que eu uso para o Rake:
$ type bake
bake is a function
bake ()
{
bundle exec rake "$@"
}
O post do blog não explica muito. A verdadeira questão é: por que o rubi virgem não obtém as dependências corretas e por que então reclama de ter as erradas?
Otheus 19/07
64
Se você tiver um motivo para manter a versão atual do rake (ou qualquer outra gema que esteja causando o problema), matt está correto, a melhor maneira de fazer isso é executar bundle exec. Isso usa a versão especificada no seu Gemfile em vez de usar a versão mais recente da gema que você instalou. (nathan.f77 tem uma boa solução abaixo se você não quiser digitar bundle exectoda vez que executar o rake)
Caso contrário, se não houver motivos para não atualizar o rake, você poderá executar
bundle update rake
Na verdade, isso atualizará o seu Gemfile.lock para usar a versão mais recente do rake, em vez de ter que executar bundle execsempre.
Nota: se você executar exatamente bundle updateisso, atualizará todas as jóias no seu Gemfile em vez de apenas o rake, o que provavelmente não é o que você deseja, porque se algo quebrar no seu aplicativo, você não saberá qual atualização de jóias causou.
A maneira menos recomendada de manter a versão mais antiga sem precisar usar bundle execé desinstalar as versões mais recentes do rake.
rake de desinstalação do $ gem
Selecione gem para desinstalar:
1. rake-0.8.7
2. rake-0.9.2
3. Todas as versões
> 2
Rake-0.9.2 desinstalado com sucesso
Isso funciona, mas se você estiver trabalhando com vários aplicativos que usam versões diferentes do rake, isso pode ser complicado, pois você precisará constantemente instalar e desinstalar versões diferentes.
Isso funcionou para mim. Por algum motivo, havia apenas uma versão (0.8.7) instalada. Então, primeiro eu fiz gem install rake. Então gem uninstall rakee escolha 0.9.2.
B Seven
7
bundle updatetambém atualizará quaisquer gemas sem versões especificadas para a versão mais recente disponível. Isso pode não ser o que você deseja. bundle update rakeSeria mais precies.
Alex Neth
Eu tenho o mesmo problema com em public_suffixvez de rake. Correr bundle update public_suffixnão tem efeito, infelizmente.
Dmitri Zaitsev
53
Experimentar bundle clean --force
Remove todas as gemas do sistema que não estão neste pacote
A última vez que isso aconteceu comigo, eu atualizei todas as minhas jóias. Eu fiz um gem uninstall rakee listou as opções de versão. Escolhi o mais novo e depois não bundle execprecisei mais usá-lo .
Basicamente, se você usá- bundle execlo, usa qualquer versão do gem instalada pelo seu pacote, então o que está no Gemfile. Sem bundle execele, usa a versão padrão do seu sistema.
Para esclarecer, o arquivo .bashrc provavelmente está localizado em seu diretório pessoal [~ / .bashrc]. Este arquivo é carregado toda vez que você abre uma nova janela do terminal.
23712 Ryan
0
Outra maneira de não digitá-lo toda vez é com um Makefile, por exemplo
Respostas:
Usar
bundle exec
é o caminho certo para fazer isso.Basicamente, o que está acontecendo é que você atualizou o rake para 0.9.2, que agora entra em conflito com a versão especificada no seu Gemfile. Anteriormente, a versão mais recente de
rake
você correspondia à versão do seu Gemfile, portanto, você não recebia nenhum aviso ao usá-lorake
.Yehuda Katz (um dos desenvolvedores originais do Bundler) explica tudo nesta postagem do blog .
Para evitar digitar
bundle exec ...
o tempo todo, você pode configurar um alias ou função em seu shell para os comandos que normalmente usa com o Bundler. Por exemplo, é isso que eu uso para o Rake:fonte
Se você tiver um motivo para manter a versão atual do rake (ou qualquer outra gema que esteja causando o problema), matt está correto, a melhor maneira de fazer isso é executar
bundle exec
. Isso usa a versão especificada no seu Gemfile em vez de usar a versão mais recente da gema que você instalou. (nathan.f77 tem uma boa solução abaixo se você não quiser digitarbundle exec
toda vez que executar o rake)Caso contrário, se não houver motivos para não atualizar o rake, você poderá executar
Na verdade, isso atualizará o seu Gemfile.lock para usar a versão mais recente do rake, em vez de ter que executar
bundle exec
sempre.Nota: se você executar exatamente
bundle update
isso, atualizará todas as jóias no seu Gemfile em vez de apenas o rake, o que provavelmente não é o que você deseja, porque se algo quebrar no seu aplicativo, você não saberá qual atualização de jóias causou.A maneira menos recomendada de manter a versão mais antiga sem precisar usar
bundle exec
é desinstalar as versões mais recentes do rake.Isso funciona, mas se você estiver trabalhando com vários aplicativos que usam versões diferentes do rake, isso pode ser complicado, pois você precisará constantemente instalar e desinstalar versões diferentes.
fonte
gem install rake
. Entãogem uninstall rake
e escolha 0.9.2.bundle update
também atualizará quaisquer gemas sem versões especificadas para a versão mais recente disponível. Isso pode não ser o que você deseja.bundle update rake
Seria mais precies.public_suffix
vez derake
. Correrbundle update public_suffix
não tem efeito, infelizmente.Experimentar
bundle clean --force
Remove todas as gemas do sistema que não estão neste pacote
fonte
A última vez que isso aconteceu comigo, eu atualizei todas as minhas jóias. Eu fiz um
gem uninstall rake
e listou as opções de versão. Escolhi o mais novo e depois nãobundle exec
precisei mais usá-lo .Basicamente, se você usá-
bundle exec
lo, usa qualquer versão do gem instalada pelo seu pacote, então o que está no Gemfile. Sembundle exec
ele, usa a versão padrão do seu sistema.fonte
Ooh! O artigo da Katz é excelente!
Eu gosto desta solução da melhor maneira:
agora você pode digitar
Para alguém como eu, que está desenvolvendo aplicativos 2.3 e 3.0.9, isso me faz sentir muito melhor.
fonte
bundle exec
está correto, mas você não deseja digitá-lo sempre.Você pode colocar isso no seu .bashrc:
fonte
Outra maneira de não digitá-lo toda vez é com um Makefile, por exemplo
fonte