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!


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


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.


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


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


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


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.

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.


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.


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)"

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)


0

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


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


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 ...



-2

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

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.