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!

Alvaro
źródło
Czy może to pomóc: github.com/rvm/rvm/issues/1860
Cyzanfar
@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

Antonio Tapiador
źródło
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.

Antonpaisow
źródło
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

Nik Kov
źródło
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

noraj
źródło
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

Klonept
źródło
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.
Mathew P. Jones
źródło
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.

Wawa Loo
źródło
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.

Georg Keferböck
źródło
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)"
Naser Mirzaei
źródło
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)

Rahul Dess
źródło
0

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

xhg
źródło
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

Greg Hilston
źródło
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.

użytkownik208769
źródło
-2

W moim przypadku obniżyłem ruby ​​z 2.5.x do 2.4.x.

Wiktor Pudiejew
źródło
-2

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

Sudhanshu
źródło