find_spec_for_exe ': não é possível encontrar o empacotador de gemas (> = 0.a) (Gem :: GemNotFoundException)

217

Eu usei sudo bundle installe isso pode ser a causa do problema?

Agora eu tenho:

  • gem -v 2.6.14
  • ruby -v ruby 2.3.5p376 (revisão de 14/09/2017 59905) [x86_64-darwin15]
  • jekyll -v jekyll 3.6.2
  • bundle -vBundler versão 1.16.0.pre.3

Estou recebendo o seguinte erro ao tentar executar bundle exec jekyll serveou apenasjekyll serve

/Users/myusername/.rvm/rubies/ruby-2.3.5/lib/ruby/site_ruby/2.3.0/rubygems.rb:271:in `find_spec_for_exe': can't find gem bundler (>= 0.a) (Gem::GemNotFoundException)
    from /Users/myusername/.rvm/rubies/ruby-2.3.5/lib/ruby/site_ruby/2.3.0/rubygems.rb:299:in `activate_bin_path'
    from /Users/myusername/.rvm/gems/ruby-2.3.5/bin/bundle:23:in `<main>'
    from /Users/myusername/.rvm/gems/ruby-2.3.5/bin/ruby_executable_hooks:15:in `eval'
    from /Users/myusername/.rvm/gems/ruby-2.3.5/bin/ruby_executable_hooks:15:in `<MacBooMacBook-MacBook-MacBook-Pro-MacBook-PrMacBook-MacBooMacBMaMacBMaMaMaMaMaMaMaMaMacBMaMaMaMacBMa

Além disso, ao acessar a pasta em que tenho meu blog cd my_path, recebo a seguinte mensagem:

A VM usou seu Gemfile para selecionar Ruby, tudo bem - a Heroku também faz isso, você pode ignorar esses avisos com 'rvm rvmrc warning ignore / Library / WebServer / Documents / blog / Gemfile'. Para ignorar o aviso para todos os arquivos, execute 'rvm rvmrc warning ignore allGemfiles'. Versão desconhecida do interpretador de ruby ​​(não sei como lidar): RUBY_VERSION.

Não faço ideia de como resolver isso. Eu só quero criar meu blog estático e, honestamente, não tenho idéia sobre Ruby, Gem ou Bundle :) Então, eu apreciaria algumas idéias!

Alvaro
fonte
Isso pode ajudar, talvez: github.com/rvm/rvm/issues/1860
Cyzanfar
@ Cyzanfar obrigado por isso! Eu tentei, agora recebi um novo erro no processo: stackoverflow.com/questions/47035080/…
Alvaro

Respostas:

363

O problema no meu caso é que o Gemfile.lockarquivo tinha uma BUNDLED_WITHversão 1.16.1e uma versão gem install bundlerinstalada 2.0.1; portanto, houve uma incompatibilidade de versão ao procurar corrigir a pasta

gem install bundler -v 1.16.1 consertou

Claro, você também pode alterar suas Gemfile.lock's BUNDLED_WITHcom última bundlerversão e usar software recente, como Sam3000 sugere

Antonio Tapiador
fonte
15
Como alternativa, convém alterar a BUNDLED_WITHversão para a versão mais recente do bundler. Isso funcionou para mim e também me salvou precisando de software desatualizado :)
Sam3000
5
O Bundler 2 acabou de ser lançado, portanto, se você não especificar o arquivo acima no Dockerfile, encontrará este erro bundler.io/blog/2019/01/03/announcing-bundler-2.html
cameck
Oi @ antonio-tapiador Estou tendo esse problema, mas estou no Windows (não consigo mudar para o Linux). Eu corri gem install bundler -v 1.16.1e agora, se gem.bat list bundler eu executar , recebo o bundler (2.0.1, 1.16.1, 1.9.6). Eu não posso mudar a versão atual: execução bundle.bat _1.16.1 installme dá esse erro: Could not find command "_1.16.1". Você tem alguma ideia, então não preciso criar uma nova pergunta? Obrigado!
Alemão
Não importa, estava faltando um sublinhado no final da versão.
Alemão
Obrigado. Isso também resolve meu mesmo problema usando o ruby ​​v2.5.1p57
widi83
132
gem update --system

atualiza os rubygems e corrige o problema.

antonpaisov
fonte
3
Apenas para esclarecer - como aponta @noraj - o problema foi introduzido na nova versão do bundler. Se você seguir o link, a solução é atualizar o RubyGems.
ReggieB
1
gem update --systemfuncionou para mim: ruby 2.5.0 , bundler 2.0.1 , macOS 10.13.6 .
Jagdeep Singh
74

Atualizar:

De acordo com a resposta de @ noraj e o comentário de @Niels Kristian, o seguinte comando deve fazer o trabalho.

gem update --system
bundle install

Eu escrevi isso no caso de alguém entrar em um problema como o meu.

gem install bundler mostra que tudo instala bem.

Fetching: bundler-1.16.0.gem (100%)
Successfully installed bundler-1.16.0
Parsing documentation for bundler-1.16.0
Installing ri documentation for bundler-1.16.0
Done installing documentation for bundler after 7 seconds
1 gem installed

Quando digitei bundle, ocorreu um erro:

/Users/nikkov/.rvm/gems/ruby-2.4.0/bin/bundle:23:in `load': cannot load such file -- /Users/nikkov/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.16.0/exe/bundle (LoadError)
    from /Users/nikkov/.rvm/gems/ruby-2.4.0/bin/bundle:23:in `<main>'
    from /Users/nikkov/.rvm/gems/ruby-2.4.0/bin/ruby_executable_hooks:15:in `eval'
    from /Users/nikkov/.rvm/gems/ruby-2.4.0/bin/ruby_executable_hooks:15:in `<main>'

E na pasta /Users/nikkov/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/não havia uma bundler-1.16.0pasta.

Eu fixo isto comsudo gem install bundler

Nik Kov
fonte
6
Depois de "corrigi-lo", certifique-se de corrigir as permissões de diretório em .rvm e .gem
humanidade
1
@humanity explicar mais detalhadas, por favor, comprar a edição minha resposta
Nik Kov
1
@ humanity chrs para sua resposta - você poderia elaborar o que você quer dizer, corrigindo suas permissões de diretório em .rvm e .gem?
BKSpurgeon
1
@ Nik kov A localização das pastas .rvm e .gem provavelmente está dentro da sua pasta pessoal. Tente alterar as permissões deles pelo comando chmod. Funcionou para mim.
Souravirus
4
sudo gem install é uma prática ruim, no caso normal todos gem install deve funcionar sem sudo
iamdi
33

A resposta real está aqui se você tentar instalar o bundler 2.0.1 ou 2.0.0 devido ao Bundler exigir o RubyGems v3.0.0

Ontem, lancei o Bundler 2.0, que introduziu várias mudanças. Uma dessas mudanças foi definir o Bundler para exigir o RubyGems v3.0.0. Após o lançamento, ficou claro que muitos de nossos usuários estão enfrentando problemas com o Bundler 2, exigindo uma versão realmente nova do RubyGems.

Ouvimos atentamente os comentários dos usuários e decidimos relaxar o requisito do RubyGems para a v2.5.0 no mínimo. Lançamos uma nova versão do Bundler, v2.0.1, que ajusta esse requisito.

Para obter mais informações, consulte: https://bundler.io/blog/2019/01/04/an-update-on-the-bundler-2-release.html

noraj
fonte
1
Obrigado, seu link me salvou um pouco de pesquisar o problema
Ilya Konyukhov
Capistrano estava falhando em uma máquina nova, mas não na antiga. Isso corrigiu o problema para mim.
CWitty
1
Não pode ser "a resposta real" para a pergunta do OP, porque o Bundler 2.0 não existia em 2017, embora as pessoas certamente encontrem esta página porque os sintomas são os mesmos.
precisa saber é o seguinte
Estou enfrentando o problema com o empacotador 2.0.1
Fabrizio Bertoglio
Aqui estão outras alterações significativas na versão 2.0.0: github.com/bundler/bundler/releases/tag/v2.0.0
Joshua Pinter
31

Isso corrigiu:

  1. Remover Gemfile.lock rm Gemfile.lock
  2. corra bundle installnovamente

EDIT: NÃO FAÇA NA PRODUÇÃO!

Para produção, acesse esta resposta: https://stackoverflow.com/posts/54083113/revisions

Klonept
fonte
Estou usando o Código do Visual Studio e carregando e publicando através do Azure Devops, que estava onde estava falhando no Build., Acabei de excluir o arquivo de bloqueio localmente, confirmado e enviado por push. O Build falhou na etapa Install Gems, mas agora funciona.
David Jones
4
Para um projeto de produção existente, é uma péssima ideia. Você acabará instalando um monte de novo código não testado (com o seu sistema).
Intentss 22/02/19
Sim, é uma má ideia e não deve ser considerada uma correção. Isso prova que a outra resposta (sobre ter uma versão do Bundler incompatível) está correta. A instalação da versão correta do Bundler deve corrigi-lo.
Robin Daugherty
Obrigado @RobinDaugherty, editei a resposta para avisar a todos para não fazerem isso na produção.
Klonept
Isso também não deve ser feito no desenvolvimento. Há um bom motivo para o arquivo de bloqueio, que não deve ser excluído em um projeto existente. Instalar a versão correta do bundler em sua máquina corrige o problema, a exclusão Gemfile.lockdeve ser considerada um último recurso, pois pode levar a outros problemas.
Robin Daugherty
19

O motivo é o seu ambiente ruby ​​atual. Você tem uma versão diferente do bundler com a versão Gemfile.lock.

  • De maneira segura, instale o bundler com a mesma versão Gemfile.lock, isso não quebrará nada se acontecer algo incampável.
  • Da maneira mais difícil, basta remover Gemfile.locke executar bundle install.
Mathew P. Jones
fonte
2
Obrigado por isso. Definitivamente, todos devem usar a versão segura para não atrapalhar o ambiente com gemas recentemente não testadas . Para instalar o bundler com uma versão específica, por exemplo, 1.17usegem install bundler -v 1.17
anka
12

Se você alterou a versão ruby ​​com a qual está usando rvm use, remova o Gemfile.lock e tente novamente.

Wawa Loo
fonte
4

Abra o Gemfile.lock, que pode ser encontrado na raiz da pasta do seu aplicativo. Role até o final do arquivo e veja a versão do empacotador usada. Depois, certifique-se de instalar a versão do bundler usada:

gem install bundler -v x.xx.xx

Ou - exclua o Gemfile.lock e o pacote configurável, se você tiver uma versão superior do empacotador instalada.

A escolha é sua, meu amigo.

Georg Keferböck
fonte
3
Eu não recomendaria excluir o Gemfile.lock porque isso também atualizaria todas as gemas. Isso pode levar a enormes problemas.
Sandro L
@SandroL - concordo totalmente com a sua declaração. No entanto, é uma opção para aqueles que tomam riscos e são atraídos pelo drama.
Georg Keferböck 14/01/19
Obrigado. Instalar a versão que eu tinha na Gemfile.lockpasta fez o truque!
Codeadventurer
2

para instalar o bundler que corresponde ao seu Gemfile.lockuso:

gem install bundler -v "$(grep -A 1 "BUNDLED WITH" Gemfile.lock | tail -n 1)"
Naser Mirzaei
fonte
1

No meu caso, as sugestões acima não funcionaram para mim. O meu era um cenário pouco diferente.

Quando eu tentei instalar bundlerusando gem install bundler.. Mas eu estava recebendo

ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.

então eu tentei usar, sudo gem install bundlerentão eu estava recebendo

ERROR:  While executing gem ... (Gem::FilePermissionError)
  You don't have write permissions for the /usr/bin directory.

então eu tentei com sudo gem install bundler -n /usr/local/bin(apenas /usr/bintrabalho no meu caso).

E então instalado com sucesso bundler

EDIT: eu uso o MacOS, talvez não /usr/binfuncione para mim por esse motivo ( https://stackoverflow.com/a/34989655/3786657 comment)

Rahul Dess
fonte
0

Eu tive o mesmo problema hoje. I resolver este problema removendo qualquer PATHno .bashrcpara idosos rvm.

xhg
fonte
1
Você me salve Eu tinha export PATH = "$ PATH: $ HOME / .rvm / bin" no meu bashrc, eu removê-lo e ele funciona
bormat
0

Meu problema foi que eu estava usando o RVM e a versão Ruby errada foi ativada ...

Espero que isso ajude pelo menos uma pessoa

Greg Hilston
fonte
0

Além das muitas respostas, meu problema surgiu ao querer usar o ruby ​​do docker como base, mas depois usar o rbenv no topo. Isso estraga muitas coisas.

Eu o corrigi neste caso:

  • A versão do Gemfile.lock precisava ser atualizada - alterar o "PACOTE COM" para a versão mais recente alterou a mensagem de erro em um ponto, portanto pode ter sido necessário
  • em .bash_profile ou .bashrc, desabilitando as variáveis ​​de ambiente:
unset GEM_HOME
unset BUNDLE_PATH

Depois disso, rbenv funcionou bem. Não tenho certeza de como esses envars estavam sendo carregados em primeiro lugar ...

user208769
fonte
-2

Eu rebaixei o ruby ​​de 2.5.x para 2.4.x no meu caso particular.

Victor Pudeyev
fonte
-2

Eu tive que fazer rake clean --force. Então fez gem install rakee assim por diante.

Sudhanshu
fonte