find_spec_for_exe ': не удается найти сборщик гемов (> = 0.a) (Gem :: GemNotFoundException)

218

Я использовал, sudo bundle installи это может быть причиной проблемы?

Теперь у меня есть:

  • gem -v 2.6.14
  • ruby -v ruby 2.3.5p376 (2017-09-14, редакция 59905) [x86_64-darwin15]
  • jekyll -v Джекилл 3.6.2
  • bundle -vBundler версия 1.16.0.pre.3

Я получаю следующую ошибку при попытке запустить bundle exec jekyll serveили простоjekyll 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

Кроме того, при доступе к папке, в которой у меня есть блог, cd my_pathя получаю следующее сообщение:

ВМ использовала ваш Gemfile для выбора Ruby, все хорошо - Heroku делает это тоже, вы можете игнорировать эти предупреждения с помощью 'rvm rvmrc warning ignore / Library / WebServer / Documents / blog / Gemfile'. Чтобы игнорировать предупреждение для всех файлов, запустите «rvm rvmrc warning ignore allGemfiles». Неизвестная версия интерпретатора ruby ​​(не знаю, как с ней обращаться): RUBY_VERSION.

Я понятия не имею, как это решить. Я просто хочу создать свой статический блог и, честно говоря, я не имею ни малейшего представления о Ruby, Gem или Bundle :) Так что я был бы признателен за некоторые идеи!

Alvaro
источник
Может ли это помочь, может быть: github.com/rvm/rvm/issues/1860
Cyzanfar
@Cyzanfar спасибо за это! Я попробовал это, теперь получил новую ошибку в процессе: stackoverflow.com/questions/47035080/…
Alvaro

Ответы:

364

Проблема в моем случае заключается в том, что у Gemfile.lockфайла была BUNDLED_WITHверсия 1.16.1и gem install bundlerустановленная версия 2.0.1, поэтому при поиске правильной папки произошла несовпадение версий

gem install bundler -v 1.16.1 починил это

Конечно, вы также можете изменить Gemfile.lock«S BUNDLED_WITHс последней bundlerверсией и использовать недавнее программное обеспечение, так как Sam3000 предполагает

Антонио Тапиадор
источник
15
В качестве альтернативы вы можете изменить BUNDLED_WITHверсию на последнюю версию bundler. Это сработало для меня, а также избавило меня от необходимости устаревшего программного обеспечения :)
Unencoded
5
Bundler 2 только что был выпущен, поэтому, если вы не укажете, как указано выше, в Dockerfile, вы столкнетесь с этой ошибкой bundler.io/blog/2019/01/03/announcing-bundler-2.html
cameck
Привет @ antonio-tapiador У меня есть эта проблема, но я нахожусь на окнах (не могу переключиться на Linux). Я запустился gem install bundler -v 1.16.1и теперь, если gem.bat list bundler я запускаю, я получаю упаковщик (2.0.1, 1.16.1, 1.9.6). Я не могу изменить текущую версию: выполнение bundle.bat _1.16.1 installдает мне эту ошибку: Could not find command "_1.16.1". У вас есть идеи, поэтому мне не нужно создавать новый вопрос? Спасибо!
немецкий язык
Неважно, я пропустил подчеркивание в конце версии.
немецкий язык
Спасибо. Это также решает мою проблему, используя ruby ​​v2.5.1p57
widi83
132
gem update --system

обновит rubygems и исправит проблему.

antonpaisov
источник
3
Просто чтобы прояснить - как указывает @noraj - проблема была введена в новой версии пакета. Если вы перейдете по ссылке, решение заключается в обновлении RubyGems.
ReggieB
1
gem update --systemу меня работали: ruby 2.5.0 , bundler 2.0.1 , macOS 10.13.6 .
Джагдип Сингх,
74

Обновить:

Согласно @ noraj игровому ответа и комментарий @Niels Kristian, в следующей команда должна делать эту работу.

gem update --system
bundle install

Я написал это на случай, если у кого-то возникнет проблема, как у меня.

gem install bundler показывает, что все устанавливается хорошо.

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

Когда я печатал, bundleбыла ошибка:

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

И в папке /Users/nikkov/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/не было bundler-1.16.0папки.

Я исправил это сsudo gem install bundler

Ник Ков
источник
6
После того, как вы «исправите» это, убедитесь, что вы исправили свои права доступа к каталогам для .rvm и .gem
humanity
1
@humanity объясните более подробно, пожалуйста, купите редактирование моего ответа
Nik Kov
1
@humanity chrs за ваш ответ - не могли бы вы уточнить, что вы имеете в виду, исправив права доступа к каталогам для .rvm и .gem?
BKSpurgeon
1
@Nik kov расположение папок .rvm и .gem, вероятно, в вашей домашней папке. Попробуйте изменить права доступа к ним командой chmod. Это сработало для меня.
Суравирус
4
Установка sudo gem - плохая практика, в нормальном случае все установки gem должны работать без sudo
iamdi
33

Реальный ответ здесь, если вы пытаетесь установить bundler 2.0.1 или 2.0.0 из-за Bundler, требующего RubyGems v3.0.0

Вчера я выпустил Bundler 2.0, который внес ряд серьезных изменений. Одним из таких изменений была настройка Bundler на использование RubyGems v3.0.0. После выпуска релиза стало ясно, что у многих наших пользователей возникают проблемы с Bundler 2, требующие действительно новой версии RubyGems.

Мы внимательно прислушиваемся к отзывам пользователей и решили уменьшить требование RubyGems до версии 2.5.0 как минимум. Мы выпустили новую версию Bundler, v2.0.1, которая регулирует это требование.

Для получения дополнительной информации см .: https://bundler.io/blog/2019/01/04/an-update-on-the-bundler-2-release.html.

noraj
источник
1
Спасибо, ваша ссылка спасла меня от поиска проблемы
Илья Конюхов
Capistrano терпел неудачу на новой машине, но не старой. Это исправило проблему для меня.
CWitty
1
Это не может быть «реальным ответом» на вопрос OP, потому что Bundler 2.0 не существовал в 2017 году, хотя люди обязательно найдут эту страницу, потому что симптомы одинаковы.
Филип Басби
У меня проблема с бандлером 2.0.1
Фабрицио Бертольо
Вот другие важные изменения в версии 2.0.0: github.com/bundler/bundler/releases/tag/v2.0.0
Джошуа Пинтер,
31

Это исправило это:

  1. Удалить Gemfile.lock rm Gemfile.lock
  2. беги bundle installснова

РЕДАКТИРОВАТЬ: НЕ ДЕЛАЙТЕ ЭТОГО В ПРОИЗВОДСТВЕ!

Для производства перейдите к этому ответу: https://stackoverflow.com/posts/54083113/revisions

Klonept
источник
Я использую код Visual Studio и загружаю и публикую через Azure Devops, где он не работает в Build. Я просто удалил файл блокировки локально, зафиксировал, а затем отправил. Сборка не удалась на этапе Install Gems, но теперь она работает.
Дэвид Джонс
4
Для существующего производственного проекта это ужасная идея. В итоге вы установите кучу непроверенного (с вашей системой) нового кода.
Интенс
Да, это плохая идея, и ее не следует считать исправлением. Это доказывает, что другой ответ (о несоответствующей версии Bundler) является правильным. Установка правильной версии Bundler должна исправить это.
Робин Догерти
Спасибо @RobinDaugherty, я отредактировал ответ, чтобы предупредить всех не делать это в производстве.
Клонепт
Это не должно быть сделано в процессе разработки. Есть веская причина для файла блокировки, его не следует удалять в существующем проекте. Установка правильной версии пакета на вашем компьютере устраняет проблему, удаление Gemfile.lockдолжно рассматриваться как последнее средство, так как это может привести к другим проблемам.
Робин Догерти
19

Причина в том, что вы используете текущую среду ruby, вы получили другую версию bundler с версией в Gemfile.lock.

  • Безопасный способ, установите пакет с той же версией в Gemfile.lock , это ничего не сломает, если случится что-то невероятное.
  • Трудный путь, просто удали Gemfile.lockи беги bundle install.
Мэтью П. Джонс
источник
2
Спасибо за это. Определенно, каждый должен использовать безопасную версию, чтобы не испортить среду с новыми непроверенными драгоценными камнями. Для установки пакетирования с определенной версией , например , 1.17использованиемgem install bundler -v 1.17
Анк
12

Если вы изменили версию ruby, которую используете rvm use, удалите Gemfile.lock и попробуйте снова.

Вава Лоо
источник
4

Откройте Gemfile.lock, который находится в корне папки вашего приложения. Прокрутите до конца файла и увидите используемую версию пакета. Затем убедитесь, что вы установили используемую версию пакета:

gem install bundler -v x.xx.xx

Или - удалите Gemfile.lock и комплект, если у вас установлена ​​более поздняя версия комплекта.

Выбор за вами, мой друг.

Георг Кефербёк
источник
3
Я бы не рекомендовал удалять Gemfile.lock, потому что это также обновит все гемы. Это может привести к огромным проблемам.
Сандро Л
@SandroL - полностью согласен с вашим утверждением. Тем не менее, это вариант для тех, кто рискует и тянется к драме.
Георг Кефербёк
Спасибо. Установка версии, которую я имел в Gemfile.lockпапке, сделала свое дело!
Codeadventurer
2

установить упаковщик, соответствующий вашему Gemfile.lockиспользованию:

gem install bundler -v "$(grep -A 1 "BUNDLED WITH" Gemfile.lock | tail -n 1)"
Насер Мирзаи
источник
1

В моем случае вышеупомянутые предложения не работали для меня. У меня был немного другой сценарий.

Когда я попытался установить bundlerс помощью gem install bundler.. Но я получал

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

тогда я попытался с помощью sudo gem install bundlerтогда я получал

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

тогда я попробовал с sudo gem install bundler -n /usr/local/bin(Просто не /usr/binработай в моем случае).

И тогда успешно установлен bundler

РЕДАКТИРОВАТЬ: я использую MacOS, может быть, /usr/binне работать для меня по этой причине ( https://stackoverflow.com/a/34989655/3786657 комментарий)

Рахул Десс
источник
0

У меня была такая же проблема сегодня. Я решаю эту проблему, удаляя любой PATHв .bashrcдля старших rvm.

XHG
источник
1
Вы спасли меня, я экспортировал PATH = "$ PATH: $ HOME / .rvm / bin" в моем bashrc, я
удаляю
0

Моя проблема была в том, что я использую RVM и у меня была активирована неправильная версия Ruby ...

Надеюсь, это поможет по крайней мере одному человеку

Грег Хилстон
источник
0

В добавление ко многим ответам моя проблема возникла из-за желания использовать рубин докера в качестве основы, а затем использовать rbenv сверху. Это многое испортит.

Я исправил это в этом случае:

  • Версия Gemfile.lock действительно нуждалась в обновлении - изменение «BUNDLED WITH» на последнюю версию в один момент привело к изменению сообщения об ошибке, поэтому, возможно, потребовалось
  • в .bash_profile или .bashrc, сбросив переменные окружения:
unset GEM_HOME
unset BUNDLE_PATH

После этого rbenv работал нормально. Не уверен, как эти env vars загружались в первую очередь ...

user208769
источник
-2

Я понизил рубин с 2.5.x до 2.4.x в моем конкретном случае.

Виктор Пудеев
источник
-2

Я должен был сделать rake clean --force. Затем сделал gem install rakeи так далее.

Sudhanshu
источник