find_spec_for_exe ': no ​​se puede encontrar el paquete de gemas (> = 0.a) (Gem :: GemNotFoundException)

218

Lo usé sudo bundle instally esa podría ser la causa del problema.

Ahora tengo:

  • gem -v 2.6.14
  • ruby -v ruby 2.3.5p376 (2017-09-14 revisión 59905) [x86_64-darwin15]
  • jekyll -v jekyll 3.6.2
  • bundle -vBundler versión 1.16.0.pre.3

Recibo el siguiente error cuando intento ejecutar bundle exec jekyll serveo simplementejekyll 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

Además, al acceder a la carpeta en la que tengo mi blog cd my_pathrecibo el siguiente mensaje:

VM usó su Gemfile para seleccionar Ruby, todo está bien, Heroku también lo hace, puede ignorar estas advertencias con 'rvm rvmrc warning ignore / Library / WebServer / Documents / blog / Gemfile'. Para ignorar la advertencia para todos los archivos, ejecute 'rvm rvmrc warning ignore allGemfiles'. Versión de intérprete de rubí desconocida (no sé cómo manejarla): RUBY_VERSION.

No tengo idea de cómo resolver esto. Solo quiero crear mi blog estático y, sinceramente, no tengo idea sobre Ruby, Gem o Bundle :) ¡Entonces agradecería algunas ideas!

Alvaro
fuente
¿Puede esto ayudar tal vez ?: github.com/rvm/rvm/issues/1860
Cyzanfar
@Cyzanfar gracias por eso! Lo probé, ahora recibí un nuevo error en el proceso: stackoverflow.com/questions/47035080/…
Alvaro

Respuestas:

364

El problema en mi caso es que el Gemfile.lockarchivo tenía una BUNDLED_WITHversión 1.16.1y una versión gem install bundlerinstalada 2.0.1, por lo que hubo una falta de coincidencia de versión al mirar a la derecha de la carpeta

gem install bundler -v 1.16.1 arreglado

Por supuesto, también puede cambiar su Gemfile.lock's BUNDLED_WITHcon la última bundlerversión y usar software reciente, como sugiere Sam3000

Antonio Tapiador
fuente
15
Como alternativa, es posible que desee cambiar la BUNDLED_WITHversión a la última versión de bundler. Esto funcionó para mí y también me ahorró la necesidad de software desactualizado :)
Sam3000
55
Bundler 2 acaba de ser lanzado, por lo que si no está especificando lo anterior en su Dockerfile, encontrará este error bundler.io/blog/2019/01/03/announcing-bundler-2.html
cameck
Hola @ antonio-tapiador Tengo este problema, pero estoy en Windows (no puedo cambiar a Linux). He corrido gem install bundler -v 1.16.1y ahora si corro gem.bat list bundler me sale un paquete (2.0.1, 1.16.1, 1.9.6). No puedo cambiar la versión actual: ejecutar bundle.bat _1.16.1 installme da este error: Could not find command "_1.16.1". ¿Tienes alguna idea, así que no tengo que crear una nueva pregunta? ¡Gracias!
Alemán
No importa, me faltaba un guión bajo al final de la versión.
Alemán
Gracias. Esto también resuelve mi mismo problema usando ruby ​​v2.5.1p57
widi83
132
gem update --system

actualizará los rubygems y solucionará el problema.

antonpaisov
fuente
3
Solo para aclarar, como señala @noraj, el problema se introdujo en la nueva versión de bundler. Si sigue el enlace, la solución es actualizar RubyGems.
ReggieB
1
gem update --systemfuncionó para mí: ruby 2.5.0 , bundler 2.0.1 , macOS 10.13.6 .
Jagdeep Singh
74

Actualizar:

Según la respuesta de @ noraj y el comentario de @Niels Kristian, el siguiente comando debería hacer el trabajo.

gem update --system
bundle install

Escribí esto en caso de que alguien tenga un problema como el mío.

gem install bundler muestra que todo se instala bien.

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

Cuando escribí bundlehubo un error:

/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>'

Y en la carpeta /Users/nikkov/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/no había una bundler-1.16.0carpeta.

Me fijo esto consudo gem install bundler

Nik Kov
fuente
66
Después de "arreglarlo", asegúrese de corregir los permisos de su directorio en .rvm y .gem
humanidad
1
@humanity explique más detallado por favor, compre la edición de mi respuesta
Nik Kov
1
@humanity chrs para su respuesta: ¿podría elaborar lo que quiere decir al corregir los permisos de su directorio en .rvm y .gem?
BKSpurgeon
1
@Nik kov la ubicación de las carpetas .rvm y .gem probablemente esté dentro de su carpeta de inicio. Intente cambiar los permisos de ellos mediante el comando chmod. Funcionó para mi.
Souravirus
44
sudo gem install es una mala práctica, en todo caso normal joya instalación debería funcionar sin sudo
iamdi
33

La verdadera respuesta está aquí si intenta instalar el paquete 2.0.1 o 2.0.0 debido a que Bundler requiere RubyGems v3.0.0

Ayer lancé Bundler 2.0 que introdujo una serie de cambios importantes. Uno de esos cambios fue configurar Bundler para requerir RubyGems v3.0.0. Después de hacer el lanzamiento, ha quedado claro que muchos de nuestros usuarios tienen problemas con Bundler 2 que requieren una versión realmente nueva de RubyGems.

Hemos estado escuchando atentamente los comentarios de los usuarios y hemos decidido relajar el requisito de RubyGems a v2.5.0 como mínimo. Hemos lanzado una nueva versión de Bundler, v2.0.1, que ajusta este requisito.

Para obtener más información, consulte: https://bundler.io/blog/2019/01/04/an-update-on-the-bundler-2-release.html

noraj
fuente
1
Gracias, su enlace me ahorró algo de tiempo para buscar en Google el problema
Ilya Konyukhov
Capistrano estaba fallando en una máquina nueva pero no en las viejas. Esto solucionó el problema para mí.
CWitty
1
No puede ser "la respuesta real" a la pregunta del OP porque Bundler 2.0 no existía en 2017, aunque las personas ciertamente encontrarán esta página porque los síntomas son los mismos.
Philihp Busby
Estoy experimentando el problema con el bundler 2.0.1
Fabrizio Bertoglio
Aquí hay otros cambios importantes en la versión 2.0.0: github.com/bundler/bundler/releases/tag/v2.0.0
Joshua Pinter
31

Esto lo solucionó:

  1. Eliminar Gemfile.lock rm Gemfile.lock
  2. corre de bundle installnuevo

EDITAR: ¡NO LO HAGAS EN PRODUCCIÓN!

Para la producción, vaya a esta respuesta: https://stackoverflow.com/posts/54083113/revisions

Klonept
fuente
Estoy usando Visual Studio Code y cargando y publicando a través de Azure Devops, que es donde estaba fallando en Build., Simplemente eliminé el archivo de bloqueo localmente, me comprometí y luego presioné. La compilación fallaba en el paso Instalar gemas, pero ahora funciona.
David Jones
44
Para un proyecto de producción existente, esta es una idea terrible. Terminará instalando un montón de código nuevo no probado (con su sistema).
Intentss
Sí, esta es una mala idea y no debe considerarse una solución. Demuestra que la otra respuesta (sobre tener una versión de Bundler no coincidente) es correcta. Instalar la versión correcta de Bundler debería solucionarlo.
Robin Daugherty
Gracias @RobinDaugherty, he editado la respuesta para advertir a todos que no lo hagan en producción.
Klonept
Esto tampoco debe hacerse en desarrollo. Hay una buena razón para el archivo de bloqueo, no debe eliminarse en un proyecto existente. Instalar la versión correcta de bundler en su máquina corrige el problema, la eliminación Gemfile.lockdebe considerarse un último recurso, ya que puede generar otros problemas.
Robin Daugherty
19

La razón es su entorno actual de ruby, tiene una versión diferente de bundler con la versión incluida Gemfile.lock.

  • De manera segura, instale el paquete con la misma versión Gemfile.lock, esto no romperá nada si ocurre algo incómodamente.
  • Manera difícil, simplemente eliminar Gemfile.locky correr bundle install.
Mathew P. Jones
fuente
2
Gracias por eso. Definitivamente, todos deberían usar la versión segura para no estropear el medio ambiente con gemas recientemente no probadas . Para instalar el paquete con una versión específica, por ejemplo, 1.17usegem install bundler -v 1.17
anka
12

Si cambió la versión de ruby ​​con la que está utilizando rvm use, elimine Gemfile.lock e intente nuevamente.

Wawa Loo
fuente
4

Abra Gemfile.lock, que se encuentra en la raíz de la carpeta de su aplicación. Desplácese hasta el final del archivo y vea la versión del paquete utilizada. Luego, asegúrese de instalar la versión del paquete utilizada:

gem install bundler -v x.xx.xx

O bien, elimine el Gemfile.lock y el paquete si tiene instalada una versión más alta del paquete.

La elección es tuya, mi amigo.

Georg Keferböck
fuente
3
No recomendaría eliminar Gemfile.lock porque eso también actualizaría todas las gemas. Esto puede conducir a grandes problemas.
Sandro L
@SandroL: totalmente de acuerdo con su declaración. Sin embargo, es una opción para quienes toman riesgos y se sienten atraídos por el drama.
Georg Keferböck
Gracias. ¡Instalar la versión que tenía en la Gemfile.lockcarpeta hizo el truco!
codeadventurer
2

para instalar el paquete que coincida con su Gemfile.lockuso:

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

En mi caso, las sugerencias anteriores no funcionaron para mí. El mío era un escenario poco diferente.

Cuando intenté instalar bundlerusando gem install bundler... Pero estaba obteniendo

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

entonces traté de usar sudo gem install bundlerentonces me estaba poniendo

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

entonces lo intenté con sudo gem install bundler -n /usr/local/bin(Solo/usr/bin trabajo en mi caso).

Y luego instalado con éxito bundler

EDITAR: uso MacOS, tal vez /usr/binno funcione para mí por esa razón ( https://stackoverflow.com/a/34989655/3786657 comentario)

Rahul Dess
fuente
0

Tuve el mismo problema hoy. Puedo solucionar este problema mediante la eliminación de cualquier PATHen el .bashrcde la tercera edad rvm.

xhg
fuente
1
Me salvaste. Había exportado PATH = "$ PATH: $ HOME / .rvm / bin" en mi bashrc, lo
elimino
0

Mi problema era que estaba usando RVM y tenía activada la versión incorrecta de Ruby ...

Espero que esto ayude al menos a una persona

Greg Hilston
fuente
0

Además de las muchas respuestas, mi problema surgió de querer usar el rubí del acoplador como base, pero luego usar rbenv en la parte superior. Esto arruina muchas cosas.

Lo arreglé en este caso por:

  • La versión de Gemfile.lock sí necesitaba actualizarse: al cambiar "BUNDLED WITH" a la última versión, en un momento cambió el mensaje de error, por lo que puede haber sido necesario
  • en .bash_profile o .bashrc, desarmando las variables de entorno:
unset GEM_HOME
unset BUNDLE_PATH

Después de eso, rbenv funcionó bien. No estoy seguro de cómo se cargaron esos env vars en primer lugar ...

usuario208769
fuente
-2

Bajé el rubí de 2.5.x a 2.4.x en mi caso particular.

Victor Pudeyev
fuente
-2

Tuve que hacer rake clean --force. Luego lo hizo gem install rakey así sucesivamente.

Sudhanshu
fuente