Bundler: nie można znaleźć paczki z klejnotami (> = 0.a) z paczką wykonywalną (Gem :: GemNotFoundException) podczas instalacji paczki z gemem

84

Wykonuję następujący skrypt:

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

wynik:

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

Dodałem /srv/myuser/.gem/ruby/2.5.0/bindo mojej ścieżki, więc mogłem zainstalować klejnoty.

na gem envpokazy

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 listpokazuje zainstalowane klejnoty. Mogę również znaleźć pakiet, gdy wykonuję:

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

Próbowałem też zainstalować pakiet, ale to też nie pomogło. Co ja robię źle?

gem which bundlenic nie pokazuje. gem spec bundlepokazuje to.

Aktualizacja: próbowałem zainstalować pakiet przed uruchomieniem pakietu, ale ten sam problem pojawia się, gdy:

gem list bundle przedstawia

bundle (0.0.1)
bundler (2.0.1)
DenCowboy
źródło

Odpowiedzi:

141

Wersja Bundler 2 wprowadziła nową funkcję, która automatycznie używa wersji Bundler określonej w Gemfile.lockTwoim projekcie. Tak więc, jeśli masz istniejący Gemfile.lockz taką linią na dole

BUNDLED WITH
   1.17.3

Bundler będzie próbował działać z wersją Bundlera <2.0. Ponieważ masz zainstalowany tylko Bundler 2.0.1 (i Rubygems> = 2.7.0), kończy się to niepowodzeniem z tym raczej nieprzydatnym komunikatem o błędzie.

Aby to naprawić, możesz

  • usuń linie z twojego Gemfile.locki używaj bundlera 2.x wszędzie od teraz lub
  • zainstaluj wersję 1.x pakietu, gem install bundler -v '< 2.0'aby używać odpowiedniej wersji określonej przez Gemfile.lock.

Więcej informacji na ten temat można znaleźć na blogu Bundler .

Holger Just
źródło
4
IMO To powinna być prawidłowa odpowiedź. Inną opcją dodania do tej listy możliwych poprawek jest usunięcie Gemfile.locki ponowne uruchomienie instalacji pakietu
Americo Savinon
Dzięki za tę odpowiedź, zaoszczędziłem wielu prób.
Orlando
Jeśli zaktualizujesz rubygemsdo nowszej wersji - to również powinno rozwiązać problem. gem update --systemaby zaktualizować do najnowszej wersji (lub przynajmniej gem update --system '2.7.10' to stay on 2.7.x version of RubyGems.
Alexej Kubarev
Blog Bundlera zawiera jednowierszowe polecenie do zainstalowania dokładnej wersji Bundlera, której szuka RubyGems: shell gem install bundler -v "$(grep -A 1 "BUNDLED WITH" Gemfile.lock | tail -n 1)" Możesz przeczytać jego artykuł, aby uzyskać więcej informacji.
Tom Nguyen
88

Zgodnie z opisem podanym w poście, przed uruchomieniem poniższej komendy:

bundle install

w skrypcie musisz uruchomić poniższe polecenie:

gem install bundler

Zatem sekwencja poleceń do działania byłaby następująca:

gem install bundler
bundle install

Zaktualizuj polecenie pakietu, jeśli nie działa, aby:

 gem install bundler -v '1.17.3'

Przyczyna przerwy w funkcjonalnościach pakietu 2.0 podana jest w poniższym linku:

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

Rohan
źródło
4
Próbowałem, ale nadal ten sam problem.
DenCowboy
1
To załatwiło sprawę wow !! Możesz zaktualizować swoją odpowiedź, a ja ją zaakceptuję. Może możesz podać więcej informacji?
DenCowboy,
1
Zaktualizowano odpowiedź !!
Rohan,
Świetna odpowiedź, nie spodziewałem się, że będzie to tak proste, jak przywrócenie wersji, ale miło jest wiedzieć, że tak.
newdark-it
1
Jeśli właśnie zaktualizowałeś Bundler 1.x do 2.x, zobacz odpowiedź od Holger Just dotyczącą BUNDLED WITH. Nie ma potrzeby obniżania wersji pakietu. Usunięcie wierszy lub aktualizacja do bieżącej wersji rozwiązuje problem.
William Lahti,
18
gem install bundler -v '< 2.0' 
rusllonrails
źródło
4

Ostatnio miałem ten sam problem. W moim przypadku zainstalowałem na bundlerze wersję inną niż ta zapisana w Gemfile.lock. Proszę sprawdzić

Dende
źródło
3

Zmierzyłem się z tym samym problemem. Problem jest spowodowany tym, że RubyGems nie może znaleźć pakietu wykonywalnego dla klejnotu pakietu w systemie

Aby to naprawić, najpierw uruchom

gem install bundler

jeśli nie masz zainstalowanego lokalnie klejnotu pakietu, uruchom

gem update --system

To wszystko

mam nadzieję, że to pomoże

Obietnica Preston
źródło
Rozwiązałem to z odpowiedzią, która również jest na tej stronie: bundler.io/blog/2019/05/14/...
DiegoG
2

Musisz zainstalować dokładną wersję Bundlera, której szuka RubyGems, uruchamiając:

$ gem install bundler -v "$(grep -A 1 "BUNDLED WITH" Gemfile.lock | tail -n 1)"
Manuel Schmitzberger
źródło
1

Właśnie dzisiaj napotkałem ten sam błąd. Wersja bundlera, którą wcześniej zainstalowałem w swoim systemie, to: 1.16.6

Postępowałem zgodnie z instrukcjami w oficjalnych dokumentach pakietu dotyczącego aktualizacji do Bundler 2 i poniższe dwa kroki załatwiły sprawę :

  1. gem install bundler (Pomaga uzyskać najnowszą wersję pakietu, która na dzień dzisiejszy to 2.0.2)
  2. bundle update --bundler
boddhisattva
źródło
1

Widziałem podobny komunikat o błędzie dla pakietu Travis po uaktualnieniu systemu Mac OS do 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)

Aby rozwiązać ten problem, ponownie zainstalowałem program Travis ze źródła.

brew remove travis;
brew install -s travis
Ярослав Рахматуллин
źródło