Bundler: не удается найти сборщик gem (> = 0.a) с исполняемым набором (Gem :: GemNotFoundException) во время установки пакета с gem

85

Я выполняю следующий сценарий:

gem install rdoc --no-document
gem install bundle
bundle

вывод:

+ gem install rdoc --no-document
Successfully installed rdoc-6.1.1
1 gem installed
+ gem install bundle
Successfully installed bundle-0.0.1
Parsing documentation for bundle-0.0.1
Done installing documentation for bundle after 2 seconds
1 gem installed
1 gem installed
+ bundle install
/usr/lib/ruby/2.5.0/rubygems.rb:289:in `find_spec_for_exe': can't find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException)
    from /usr/lib/ruby/2.5.0/rubygems.rb:308:in `activate_bin_path'
    from /srv/myuser/.gem/ruby/2.5.0/bin/bundle:23:in `<main>'

Я добавил /srv/myuser/.gem/ruby/2.5.0/binв свой путь, чтобы иметь возможность устанавливать драгоценные камни.

на gem envшоу

RubyGems Environment:
  - RUBYGEMS VERSION: 2.7.7
  - RUBY VERSION: 2.5.1 (2018-03-29 patchlevel 57) [x86_64-linux]
  - INSTALLATION DIRECTORY: /usr/lib/ruby/gems/2.5.0
  - USER INSTALLATION DIRECTORY: /srv/myuser/.gem/ruby/2.5.0
  - RUBY EXECUTABLE: /usr/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/bin
  - SPEC CACHE DIRECTORY: /srv/myuser/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /usr/lib/ruby/gems/2.5.0
     - /srv/myuser/.gem/ruby/2.5.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
     - "gem" => "--user-install"
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /usr/local/sbin
     - /usr/local/bin
     - /usr/bin

gem listпоказывает установленные драгоценные камни. Я также могу найти связку, когда выполняю:

ls -ltrah /srv/myuser/.gem/ruby/2.5.0/bin

Я также пытался установить бандлер, но это тоже не помогло. Что я делаю неправильно?

gem which bundleничего не показывает. gem spec bundleпоказывает это.

Обновление: я пытался установить сборщик перед запуском пакета, но та же проблема возникает, когда:

gem list bundle показывает

bundle (0.0.1)
bundler (2.0.1)
DenCowboy
источник

Ответы:

141

Bundler версии 2 представил новую функцию для автоматического использования версии Bundler, указанной в файле Gemfile.lockвашего проекта. Таким образом, если у вас есть существующий Gemfile.lockс такой строкой внизу

BUNDLED WITH
   1.17.3

Bundler попытается запустить Bundler версии <2.0. Поскольку у вас только что установлен Bundler 2.0.1 (и Rubygems> = 2.7.0), это не помогает с этим довольно бесполезным сообщением об ошибке.

Чтобы исправить это, вы можете

  • удалите строки из вашего Gemfile.lockи, чтобы использовать Bundler 2.x везде, или
  • установите версию пакета 1.x, gem install bundler -v '< 2.0'чтобы использовать соответствующую версию, указанную вашим Gemfile.lock.

Более подробную информацию об этом можно найти в блоге Bundler .

Хольгер Джаст
источник
4
ИМО Это должен быть правильный ответ. Другой вариант добавить в этот список возможных исправлений - удалить Gemfile.lockи снова запустить установку пакета
Америко Савинон
Спасибо за этот ответ, избавив меня от многих попыток.
Орландо
Если кто-то обновится rubygemsдо более новой версии - это тоже должно решить проблему. gem update --systemобновить до последней версии (или хотя бы gem update --system '2.7.10' to stay on 2.7.x version of RubyGems.
Алексей Кубарев
Блог Bundler предоставляет однострочную команду для установки именно той версии Bundler, которую ищет RubyGems: shell gem install bundler -v "$(grep -A 1 "BUNDLED WITH" Gemfile.lock | tail -n 1)" вы можете прочитать их статью для получения дополнительной информации.
Tom Nguyen
88

Согласно описанию, упомянутому в сообщении, перед запуском указанной ниже команды:

bundle install

в скрипте вам нужно выполнить следующую команду:

gem install bundler

Итак, последовательность команд для работы будет следующей:

gem install bundler
bundle install

Если не работает, обновите команду сборщика:

 gem install bundler -v '1.17.3'

Причина сбоя в работе Bundler 2.0 указана в указанной ниже ссылке:

https://bundler.io/blog/2019/01/04/an-update-on-the-bundler-2-release.html

Рохан
источник
4
Пробовал, но все та же проблема.
DenCowboy
1
Это помогло! Вы можете обновить свой ответ, и я его приму. Может быть, вы можете предоставить дополнительную информацию?
DenCowboy
1
Обновил ответ !!
Рохан
Отличный ответ, не ожидал, что это будет так же просто, как вернуть версию, но приятно знать, что это было.
newdark-it
1
Если вы только что обновили Bundler 1.x до 2.x, см. Ответ от Holger Just, связанный с BUNDLED WITH. Нет необходимости понижать версию вашего упаковщика. Удаление строк или обновление до текущей версии решает.
Уильям Лахти
40

Я даже не мог этого сделать bundle -v. Это разобралось:

gem update --system

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

Возможно какое-то несовпадение версий между ruby ​​+ gem + bundler

Estani
источник
Это решило проблему для меня, а также соответствует собственным документам сборщика
Джош,
4

Недавно у меня была такая же проблема. В моем случае я установил в сборщике версию, отличную от той, которая записана в Gemfile.lock. пожалуйста, проверьте

Dende
источник
3

Я столкнулся с той же проблемой. Проблема вызвана тем, что RubyGems не может найти исполняемый пакет для гема сборщика в системе.

Чтобы исправить это, сначала запустите

gem install bundler

если у вас не установлен пакет gem локально, запустите

gem update --system

Это все

надеюсь, это поможет

Обещание Престон
источник
Я решил это с помощью ответа, который также есть на этом сайте: bundler.io/blog/2019/05/14/…
DiegoG
2

Вы должны установить именно ту версию Bundler, которую ищет RubyGems, запустив:

$ gem install bundler -v "$(grep -A 1 "BUNDLED WITH" Gemfile.lock | tail -n 1)"
Мануэль Шмитцбергер
источник
1

Я столкнулся с той же ошибкой сегодня. Версия пакета, которую я ранее установил в своей системе, была: 1.16.6.

Следуйте инструкциям в официальных документах по сборщику о том, как перейти на Bundler 2, и два следующих шага сделали свое дело:

  1. gem install bundler (Помогает получить последнюю версию сборщика, которая на сегодняшний день - 2.0.2)
  2. bundle update --bundler
бодхисаттва
источник
1

Я видел подобное сообщение об ошибке для пакета travis после обновления mac os до Catalina.

Traceback (most recent call last):
    2: from /usr/local/bin/travis:22:in `<main>'
    1: from /usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/rubygems.rb:263:in `bin_path'
/usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/rubygems.rb:284:in `find_spec_for_exe': can't find gem travis (>= 0.a) with executable travis (Gem::GemNotFoundException)

Чтобы решить эту проблему, я переустановил Travis из исходников.

brew remove travis;
brew install -s travis
Ярослав Рахматуллин
источник