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)

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 .


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


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,



4

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


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


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)"

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.