Ao executar rake
, recebo este erro:
Você já ativou o rake 0.9.2, mas seu Gemfile requer o rake 0.8.7. Considere usar o pacote executável.
Usar em bundle exec rake
vez de apenas rake
parece funcionar, mas é a melhor maneira de corrigir isso?
Ao executar rake
, recebo este erro:
Você já ativou o rake 0.9.2, mas seu Gemfile requer o rake 0.8.7. Considere usar o pacote executável.
Usar em bundle exec rake
vez de apenas rake
parece funcionar, mas é a melhor maneira de corrigir isso?
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á-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 "$@"
}
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 exec
toda 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 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.
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.
gem install rake
. Então gem 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 de rake
. Correr bundle 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
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ão bundle 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. Sem bundle exec
ele, usa a versão padrão do seu sistema.
bundle exec
está correto, mas você não deseja digitá-lo sempre.
Você pode colocar isso no seu .bashrc:
# Automatically invoke bundler for rake, if necessary.
rake() { if [ -e ./Gemfile.lock ]; then bundle exec rake "$@"; else /usr/bin/env rake "$@"; fi; }