find_spec_for_exe ': не вдається знайти gem bundler (> = 0.a) (Gem :: GemNotFoundException)


218

Я використав, sudo bundle installі це може бути причиною проблеми?

Зараз у мене є:

  • gem -v 2.6.14
  • ruby -v ruby 2.3.5p376 (2017-09-14 версія 60905) [x86_64-darwin15]
  • jekyll -v джекіл 3.6.2
  • bundle -vВерсія Bundler 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я отримую таке повідомлення:

VM використовував ваш Gemfile для вибору Ruby, це все добре - Heroku робить це теж, ви можете ігнорувати ці попередження за допомогою "rvm rvmrc попередження ігнорування / Бібліотека / WebServer / Документи / блог / Gemfile". Для ігнорування попередження для всіх файлів запустіть 'rvm rvmrc попередження ігноруйте allGemfiles'. Невідома версія перекладача рубіну (не знаю, як впоратися): RUBY_VERSION.

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


Чи може це допомогти, можливо: github.com/rvm/rvm/isissue/1860
Cyzanfar

@Cyzanfar дякую за це! Я спробував це, тепер отримав нову помилку в процесі: stackoverflow.com/questions/47035080/…
Альваро

Відповіді:


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версію на останню версію пакета. Це працювало для мене, а також врятувало мене потребуючи застарілого програмного забезпечення :)
Невкодований

5
Щойно випущено Bundler 2, тому якщо ви не вказали, як зазначено вище, у вашому Dockerfile, ви отримаєте цю помилку bundler.io/blog/2019/01/03/announcing-bundler-2.html
comeck

Привіт @ antonio-tapiador У мене виникає ця проблема, але я в Windows (не можу перейти на 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

оновить рубігеми і виправить проблему.


3
Просто для уточнення - як зазначає @noraj - проблема була введена в новій версії bundler. Якщо ви переходите за посиланням, рішення - оновити RubyGems.
ReggieB

1
gem update --systemпрацював на мене: ruby 2.5.0 , bundler 2.0.1 , macOS 10.13.6 .
Jagdeep Singh

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
людство

1
@humanity поясніть більш детально, будь ласка, придбайте редагування моєї відповіді
Nik Kov

1
@humanity chrs для вашої відповіді - чи не зможете ви розібратися в тому, що ви маєте на увазі, виправляючи дозволи вашого каталогу на .rvm та .gem?
BKSpurgeon

1
@Nik kov розташування папок .rvm та .gem, ймовірно, знаходиться всередині вашої домашньої папки. Спробуйте змінити дозволи на них командою chmod. Це працювало для мене.
Суравірус

4
встановлення sudo gem - це погана практика, у звичайному випадку всі встановлення дорогоцінних каменів повинні працювати без
судо

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 до v2.5.0 як мінімум. Ми випустили нову версію Bundler, v2.0.1, яка коригує цю вимогу.

Для отримання додаткової інформації дивіться: https://bundler.io/blog/2019/01/04/an-update-on-the-bundler-2-release.html


1
Дякую, ваше посилання врятувало мене деякий час від гуглінгу проблеми
Ілля Конюхов

Капістрано вийшов з ладу на новій машині, але не на старій. Це вирішило для мене проблему.
CWitty

1
Це не може бути "справжньою відповіддю" на питання ОП, оскільки Bundler 2.0 не існував у 2017 році, хоча люди, безумовно, знайдуть цю сторінку, оскільки симптоми однакові.
Філіхп Бусбі

У мене виникають проблеми з bundler 2.0.1
Fabrizio Bertoglio


31

Це виправлено:

  1. Видаліть Gemfile.lock rm Gemfile.lock
  2. bundle installзнову біжи

РЕДАКТУЙТЕ: НЕ робіть цього у виробництві!

Для виробництва перейдіть до цієї відповіді: https://stackoverflow.com/posts/54083113/reitions


Я використовую Visual Studio Code і завантажую та публікую через Azure Devops, де це не вдалося в Build. Я просто видалив файл блокування локально, здійснив і потім натиснув. Збірка не вдалася на кроці Install Gems, але зараз вона працює.
Девід Джонс

4
Для існуючого виробничого проекту це жахлива ідея. Ви в кінцевому підсумку встановите купу неперевіреного (з вашою системою) нового коду.
Намір

Так, це погана ідея, і її не слід вважати виправленням. Це дійсно доводить, що інша відповідь (про наявність невідповідної версії Bundler) є правильною. Встановлення правильної версії Bundler має виправити це.
Робін Догерті

Дякую @RobinDaugherty, я відредагував відповідь, щоб попередити всіх не робити цього у виробництві.
Клонепт

Цього також не слід робити в процесі розробки. Файл блокування є вагомою причиною, його не слід видаляти в існуючому проекті. Встановлення правильної версії пакета на вашій машині виправляє проблему, видалення Gemfile.lockслід вважати крайнім засобом, оскільки це може призвести до інших проблем.
Робін Догерті

19

Причина - ваше поточне середовище в рубіні, ви отримали іншу версію пакета з версією в Gemfile.lock.

  • Безпечний спосіб, встановіть постачальник з тією ж версією в Gemfile.lock, це нічого не порушить, якщо трапилася якась незрівнянна річ.
  • Важкий спосіб, просто видаліть Gemfile.lockі запустіть bundle install.

2
Дякую за це. Безумовно, кожен повинен використовувати безпечну версію, щоб не зіпсувати навколишнє середовище з нещодавно перевіреними дорогоцінними каменями. Для установки пакетування з певною версією , наприклад , 1.17використаннямgem install bundler -v 1.17
Анк

12

Якщо ви змінили рубінову версію, якою ви користуєтесь 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

EDIT: Я використовую MacOS, можливо, /usr/binдля мене це не працює ( https://stackoverflow.com/a/34989655/3786657 коментар)


0

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


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 чудово працював. Не впевнений, як завантажувались вони в першу чергу ...



-2

Мені довелося це робити rake clean --force. Тоді gem install rakeтак і далі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.