find_spec_for_exe ': nie można znaleźć bundlera klejnotów (> = 0.a) (Gem :: GemNotFoundException)


218

Użyłem sudo bundle installi może to być przyczyną problemu?

Teraz mam:

  • gem -v 2.6.14
  • ruby -v ruby 2.3.5p376 (wersja 14.09.2017 59905) [x86_64-darwin15]
  • jekyll -v jekyll 3.6.2
  • bundle -vWersja Bundlera 1.16.0.pre.3

Podczas próby uruchomienia bundle exec jekyll servelub po prostu pojawia się następujący błądjekyll 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

Ponadto, uzyskując dostęp do folderu, w którym mam mojego bloga cd my_path, otrzymuję następujący komunikat:

VM użyła twojego Gemfile do wybrania Ruby, wszystko jest w porządku - Heroku też to robi, możesz zignorować te ostrzeżenia za pomocą 'rvm rvmrc warning ignore / Library / WebServer / Documents / blog / Gemfile'. Aby zignorować ostrzeżenie dla wszystkich plików, uruchom polecenie „rvm rvmrc warning ignore allGemfiles”. Nieznana wersja interpretera ruby ​​(nie wiem, jak sobie z tym poradzić): RUBY_VERSION.

Nie mam pojęcia, jak to rozwiązać. Chcę tylko stworzyć mojego statycznego bloga i szczerze mówiąc, nie mam pojęcia o Ruby, Gemie ani pakiecie :) Więc doceniłbym pewne spostrzeżenia!



@Cyzanfar dzięki za to! Próbowałem, teraz mam nowy błąd w procesie: stackoverflow.com/questions/47035080/...
— Alvaro

Odpowiedzi:


364

Problem w moim przypadku polega na tym, że Gemfile.lockplik miał BUNDLED_WITHwersję 1.16.1i gem install bundlerzainstalowaną wersję 2.0.1, więc wystąpiło niedopasowanie wersji, gdy szukałem odpowiedniego folderu

gem install bundler -v 1.16.1 naprawione

Oczywiście, można także zmienić Gemfile.lock„s BUNDLED_WITHz ostatniej bundlerwersji i wykorzystywać najnowsze oprogramowanie, jak Sam3000 sugeruje


15
Alternatywnie możesz zmienić BUNDLED_WITHwersję na najnowszą wersję programu pakującego. To zadziałało dla mnie i uratowało mnie, że potrzebuję przestarzałego oprogramowania :)
— Unencoded

5
Pakiet Bundler 2 właśnie został wydany, więc jeśli nie określisz powyższego pliku Docker, napotkasz ten błąd bundler.io/blog/2019/01/03/announcing-bundler-2.html
— cameck

Cześć @ antonio-tapiador Mam ten problem, ale korzystam z systemu Windows (nie mogę przełączyć się na system Linux). Uruchomiłem gem install bundler -v 1.16.1i teraz, jeśli uruchomię gem.bat list bundler , dostanę pakiet (2.0.1, 1.16.1, 1.9.6). Nie mogę zmienić aktualną wersję: wykonanie bundle.bat _1.16.1 installdaje mi ten błąd: Could not find command "_1.16.1". Masz jakiś pomysł, więc nie muszę tworzyć nowego pytania? Dzięki!
— Niemiecki

Nieważne, brakowało mi podkreślenia na końcu wersji.
— Niemiecki

Dzięki. To rozwiązuje również ten sam problem za pomocą ruby ​​v2.5.1p57
— widi83

132
gem update --system

zaktualizuje rubygemy i naprawi problem.


3
Aby wyjaśnić - jak wskazuje @noraj - problem został wprowadzony w nowej wersji pakietu. Jeśli klikniesz ten link, rozwiązaniem jest aktualizacja RubyGems.
— ReggieB,

1
gem update --systempracował dla mnie: ruby 2.5.0 , bundler 2.0.1 , macOS 10.13.6 .
— Jagdeep Singh

74

Aktualizacja:

Zgodnie z odpowiedzią @ noraj i komentarzem @Nielsa Kristiana następujące polecenie powinno wykonać zadanie.

gem update --system
bundle install

Napisałem to na wypadek, gdyby ktoś wpadł w taki problem.

gem install bundler pokazuje, że wszystko instaluje się dobrze.

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

Podczas pisania bundlewystąpił błąd:

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

A w folderze /Users/nikkov/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/nie było bundler-1.16.0folderu.

I stała to zsudo gem install bundler


6
Po „naprawieniu” upewnij się, że naprawiłeś uprawnienia do katalogu na .rvm i .gem
— ludzkość

1
@ ludzkość wyjaśnij bardziej szczegółowo, proszę, edytuj moją odpowiedź
— Nik Kov

1
@humanity chrs za twoją odpowiedź - czy mógłbyś wyjaśnić, co masz na myśli, ustalając uprawnienia do katalogu na .rvm i .gem?
— BKSpurgeon

1
@Nik kov lokalizacja folderów .rvm i .gem znajduje się prawdopodobnie w folderze domowym. Spróbuj zmienić ich uprawnienia za pomocą komendy chmod. To zadziałało dla mnie.
— Souravirus

4
instalacja klejnotów sudo to zła praktyka, w normalnym przypadku wszystkie instalacje klejnotów powinny działać bez sudo
— iamdi

33

Prawdziwa odpowiedź jest tutaj, jeśli próbujesz zainstalować pakiet 2.0.1 lub 2.0.0, ponieważ Bundler wymaga RubyGems v3.0.0

Wczoraj wydałem Bundler 2.0, który wprowadził wiele przełomowych zmian. Jedną z tych zmian było ustawienie Bundlera na wymaganie RubyGems v3.0.0. Po wydaniu tej wersji stało się jasne, że wielu naszych użytkowników ma problemy z Bundlerem 2, który wymaga naprawdę nowej wersji RubyGems.

Słuchaliśmy uważnie opinii użytkowników i zdecydowaliśmy się złagodzić wymóg RubyGems do wersji 2.5.0. Wydaliśmy nową wersję Bundlera, v2.0.1, która dostosowuje to wymaganie.

Aby uzyskać więcej informacji, zobacz: https://bundler.io/blog/2019/01/04/an-update-on-the-bundler-2-release.html


1
Dzięki, twój link uratował mi trochę czasu od
— googlowania

Capistrano zawodził na nowej maszynie, ale nie na starych. To rozwiązało problem.
— CWitty

1
Nie może to być „prawdziwa odpowiedź” na pytanie PO, ponieważ Bundler 2.0 nie istniał w 2017 roku, chociaż ludzie z pewnością znajdą tę stronę, ponieważ objawy są takie same.
— Philihp Busby

Mam problem z pakietem 2.0.1
— Fabrizio Bertoglio,

Oto inne przełomowe zmiany w wersji 2.0.0: github.com/bundler/bundler/releases/tag/v2.0.0
— Joshua Pinter

31

To naprawiło:

  1. Usuń Gemfile.lock rm Gemfile.lock
  2. biegnij bundle installjeszcze raz

EDYCJA: NIE RÓB TO W PRODUKCJI!

W sprawie produkcji przejdź do tej odpowiedzi: https://stackoverflow.com/posts/54083113/revisions


Korzystam z programu Visual Studio Code oraz przesyłam i publikuję za pośrednictwem platformy Azure Devops, czyli tam, gdzie zawiodło w wersji Build. Właśnie usunąłem plik blokady lokalnie, zatwierdziłem, a następnie wypchnąłem. Kompilacja nie powiodła się na etapie instalacji klejnotów, ale teraz działa.
— David Jones

4
Dla istniejącego projektu produkcyjnego jest to okropny pomysł. Skończysz instalować garść niesprawdzonego (z twoim systemem) nowego kodu.
— Intentss

Tak, to zły pomysł i nie należy go uważać za poprawkę. Dowodzi to, że druga odpowiedź (dotycząca niedopasowanej wersji Bundlera) jest poprawna. Zainstalowanie poprawnej wersji Bundlera powinno to naprawić.
— Robin Daugherty,

Dzięki @RobinDaugherty, zredagowałem odpowiedź, aby ostrzec wszystkich, aby nie robili tego podczas produkcji.
— Klonept

Tego też nie powinno się robić w fazie rozwoju. Istnieje dobry powód, dla którego plik blokady nie powinien zostać usunięty z istniejącego projektu. Zainstalowanie prawidłowej wersji programu pakującego na komputerze rozwiązuje problem, usunięcie Gemfile.lockpowinno być traktowane jako ostateczność, ponieważ może prowadzić do innych problemów.
— Robin Daugherty

19

Powodem jest twoje obecne środowisko rubinowe, masz inną wersję bundlera z wersją w Gemfile.lock.

  • Bezpiecznie, zainstaluj program pakujący z tą samą wersją Gemfile.lock, nic to nie zepsuje, jeśli wydarzy się coś nie do zniesienia.
  • Twardy sposób, po prostu usuń Gemfile.locki uruchom bundle install.

2
Dziękuję za to. Zdecydowanie każdy powinien korzystać z bezpiecznej wersji, aby nie zepsuć środowiska nowymi niesprawdzonymi klejnotami. Aby zainstalować pakiet z określoną wersją, np. 1.17Użyjgem install bundler -v 1.17
— anka

12

Jeśli zmieniłeś rvm useużywaną wersję ruby , usuń Gemfile.lock i spróbuj ponownie.


4

Otwórz Gemfile.lock, który znajduje się w katalogu głównym folderu aplikacji. Przewiń do końca pliku i zobacz używaną wersję pakietu. Następnie upewnij się, że zainstalowałeś używaną wersję pakietu:

gem install bundler -v x.xx.xx

Lub - usuń plik Gemfile.lock i pakiet, jeśli masz zainstalowaną wyższą wersję pakietu.

Wybór należy do ciebie, przyjacielu.


3
Nie polecam usuwania Gemfile.lock, ponieważ spowoduje to również aktualizację wszystkich klejnotów. Może to prowadzić do ogromnych problemów.
— Sandro L

@ SandroL - całkowicie zgadzam się ze swoim oświadczeniem. Jest to jednak opcja dla osób podejmujących ryzyko i pociągających do dramatu.
— Georg Keferböck

Dziękuję Ci. Zainstalowanie wersji, którą miałem w Gemfile.lockfolderze, załatwiło sprawę!
— codeadventurer

2

aby zainstalować pakiet, który pasuje do twojego Gemfile.lockzastosowania:

gem install bundler -v "$(grep -A 1 "BUNDLED WITH" Gemfile.lock | tail -n 1)"

1

W moim przypadku powyższe sugestie nie działały dla mnie. Mój był trochę inny scenariusz.

Kiedy próbowałem zainstalować bundlerprzy użyciu gem install bundler.. Ale dostawałem

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

potem próbowałem użyć, sudo gem install bundlera potem dostawałem

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

potem próbowałem z sudo gem install bundler -n /usr/local/bin(po prostu nie /usr/bindziała w moim przypadku).

A następnie pomyślnie zainstalowany bundler

EDYCJA: Używam MacOS, może /usr/binz tego powodu nie działa dla mnie ( https://stackoverflow.com/a/34989655/3786657 komentarz)


0

Miałem dzisiaj ten sam problem. I rozwiązać ten problem poprzez usunięcie każdy PATHw .bashrcdla starszych rvm.


1
Zapisujesz mnie, że miałem eksport ŚCIEŻKI = "$ ŚCIEŻKA: $ HOME / .rvm / bin" w moim bashrc, usuwam go i działa
— bormat

0

Mój problem polegał na tym, że korzystam z RVM i aktywowałem niewłaściwą wersję Ruby ...

Mam nadzieję, że pomoże to przynajmniej jednej osobie


0

Dodając do wielu odpowiedzi, mój problem wynikał z chęci użycia rubinu dokera jako podstawy, ale następnie z użyciem rbenv na górze. To psuje wiele rzeczy.

Naprawiłem to w tym przypadku przez:

  • Wersja Gemfile.lock wymagała aktualizacji - zmiana „BUNDLED WITH” na najnowszą wersję w pewnym momencie zmieniła komunikat o błędzie, więc mogła być wymagana
  • w .bash_profile lub .bashrc, odznaczając zmienne środowiskowe:
unset GEM_HOME
unset BUNDLE_PATH

Następnie rbenv działał dobrze. Nie jestem pewien, jak ładowały się te zmienne env.



-2

Musiałem zrobić rake clean --force. Potem gem install raketak się stało i tak dalej.

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.