find_spec_for_exe ': không thể tìm thấy gói đá quý (> = 0.a) (Gem :: GemNotFoundException)


217

Tôi đã sử dụng sudo bundle installvà đó có thể là nguyên nhân của vấn đề?

Bây giờ tôi có:

  • gem -v 2.6,14
  • ruby -v ruby 2.3.5p376 (2017-09-14 sửa đổi 59905) [x86_64-darwin15]
  • jekyll -v jekyll 3.6.2
  • bundle -vPhiên bản Bundler 1.16.0.pre.3

Tôi đang gặp lỗi sau khi cố chạy bundle exec jekyll servehoặc chỉ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

Ngoài ra, khi truy cập vào thư mục mà tôi có blog của mình, cd my_pathtôi nhận được thông báo sau:

VM đã sử dụng Gemfile của bạn để chọn Ruby, tất cả đều ổn - Heroku cũng vậy, bạn có thể bỏ qua các cảnh báo này với 'rvm rvmrc bỏ qua cảnh báo / Library / WebServer / Documents / blog / Gemfile'. Để bỏ qua cảnh báo cho tất cả các tệp chạy 'cảnh báo rvm rvmrc bỏ qua allGemfiles'. Phiên bản trình thông dịch ruby ​​không xác định (không biết cách xử lý): RUBY_VERSION.

Tôi không biết làm thế nào để giải quyết điều này. Tôi chỉ muốn tạo blog tĩnh của mình và thành thật mà nói tôi không có ý tưởng gì về Ruby, Gem hay Bundle :) Vì vậy tôi sẽ đánh giá cao một số hiểu biết!


Điều này có thể giúp được không: github.com/rvm/rvm/issues/1860
Cyzanfar

@Cyzanfar cảm ơn vì điều đó! Tôi đã thử nó, bây giờ đã có một lỗi mới trong quá trình: stackoverflow.com/questions/47035080/ Khăn
Alvaro

Câu trả lời:


363

Vấn đề trong trường hợp của tôi là Gemfile.locktệp có BUNDLED_WITHphiên bản 1.16.1gem install bundlerphiên bản đã cài đặt 2.0.1, do đó, có một phiên bản không khớp khi tìm bên phải thư mục

gem install bundler -v 1.16.1 sửa nó

Tất nhiên, bạn cũng có thể thay đổi của bạn Gemfile.lock's BUNDLED_WITHvới cuối cùng bundlerphiên bản và sử dụng phần mềm gần đây, như Sam3000 gợi ý


15
Thay vào đó, bạn có thể muốn thay đổi BUNDLED_WITHphiên bản thành phiên bản mới nhất của gói. Điều này làm việc cho tôi và cũng tiết kiệm cho tôi khi cần phần mềm lỗi thời :)
Sam3000

5
Bundler 2 vừa được phát hành, vì vậy nếu bạn không chỉ định như trên trong Dockerfile của mình, bạn sẽ gặp lỗi này bundler.io/blog/2019/01/03/announcing-bundler-2.html
cameck

Xin chào @ antonio-tapiador Tôi đang gặp vấn đề này, nhưng tôi đang ở trên windows (không thể chuyển sang linux). Tôi đã chạy gem install bundler -v 1.16.1và bây giờ nếu gem.bat list bundler tôi chạy, tôi nhận được gói (2.0.1, 1.16.1, 1.9.6). Tôi không thể thay đổi phiên bản hiện tại: thực thi bundle.bat _1.16.1 installcho tôi lỗi này : Could not find command "_1.16.1". Bạn có ý tưởng gì không, vì vậy tôi không phải tạo một câu hỏi mới? Cảm ơn!
Đức

Không sao, tôi đã bỏ lỡ một dấu gạch dưới ở cuối phiên bản.
Đức

Cảm ơn. Điều này cũng giải quyết vấn đề tương tự của tôi khi sử dụng ruby ​​v2.5.1p57
widi83

132
gem update --system

sẽ cập nhật rubygems và sẽ khắc phục sự cố.


3
Chỉ cần làm rõ - như @noraj chỉ ra - vấn đề đã được giới thiệu trong phiên bản mới của trình đóng gói. Nếu bạn theo liên kết, giải pháp là cập nhật RubyGems.
ReggieB

1
gem update --systemlàm việc cho tôi: ruby 2.5.0 , bundler 2.0.1 , macOS 10.13.6 .
Jagdeep Singh

74

Cập nhật:

Theo câu trả lời của @ noraj và bình luận của @Niels Kristian, lệnh sau sẽ thực hiện công việc.

gem update --system
bundle install

Tôi đã viết điều này trong trường hợp ai đó gặp phải một vấn đề như của tôi.

gem install bundler cho thấy rằng mọi thứ cài đặt tốt.

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

Khi tôi gõ bundlecó một lỗi:

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

Và trong thư mục /Users/nikkov/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/không có một bundler-1.16.0thư mục.

Tôi đã sửa cái này vớisudo gem install bundler


6
Sau khi bạn "sửa" nó, hãy đảm bảo bạn sửa các quyền thư mục của mình trên .rvm và .gem
nhân loại vào

1
@humanity giải thích chi tiết hơn xin vui lòng, mua chỉnh sửa câu trả lời của tôi
Nik Kov

1
@humanity chrs cho câu trả lời của bạn - bạn có thể giải thích ý của bạn bằng cách sửa quyền thư mục của bạn trên .rvm và .gem không?
BKSpurgeon

1
@Nik kov vị trí của các thư mục .rvm và .gem có thể nằm trong thư mục nhà của bạn. Cố gắng thay đổi quyền của chúng bằng lệnh chmod. Nó làm việc cho tôi.
Souravirus

4
Cài đặt sudo gem là thực hành xấu, trong trường hợp bình thường, tất cả các cài đặt gem nên hoạt động mà không có sudo
iamdi

33

Câu trả lời thực sự nằm ở đây nếu bạn cố gắng cài đặt gói 2.0.1 hoặc 2.0.0 do Bundler yêu cầu RubyGems v3.0.0

Hôm qua tôi đã phát hành Bundler 2.0 giới thiệu một số thay đổi đột phá. Một trong những thay đổi đó là thiết lập Bundler để yêu cầu RubyGems v3.0.0. Sau khi phát hành, có thể thấy rõ rằng rất nhiều người dùng của chúng tôi đang gặp vấn đề với Bundler 2 yêu cầu một phiên bản RubyGems thực sự mới.

Chúng tôi đã lắng nghe phản hồi chặt chẽ từ người dùng và đã quyết định nới lỏng yêu cầu của RubyGems xuống mức tối thiểu 2.5.0. Chúng tôi đã phát hành phiên bản Bundler mới, v2.0.1, điều chỉnh yêu cầu này.

Để biết thêm thông tin, hãy xem: https://bundler.io/blog/2019/01/04/an-update-on-the-bundler-2-release.html


1
Cảm ơn, liên kết của bạn đã giúp tôi tiết kiệm thời gian để giải quyết vấn đề
Ilya Konyukhov

Capistrano đã thất bại trên một máy mới nhưng không phải là máy cũ. Điều này đã khắc phục vấn đề cho tôi.
CWitty

1
Đó không thể là "câu trả lời thực sự" cho câu hỏi của OP vì Bundler 2.0 không tồn tại vào năm 2017, mặc dù mọi người chắc chắn sẽ tìm thấy trang này vì các triệu chứng là như nhau.
Philihp Busby

Tôi đang gặp vấn đề với gói 2.0.1
Fabrizio Bertoglio

Dưới đây là những thay đổi đột phá khác trong phiên bản 2.0.0: github.com/bundler/bundler/release/tag/v2.0.0
Joshua Pinter

31

Điều này đã sửa nó:

  1. Xóa Gemfile.lock rm Gemfile.lock
  2. chạy bundle installlại

EDIT: KHÔNG LÀM NÓ TRONG SẢN XUẤT!

Để sản xuất, hãy đi tới câu trả lời này: https://stackoverflow.com/posts/54083113/revutions


Tôi đang sử dụng Visual Studio Code và tải lên và xuất bản qua Azure Devops, đó là nơi nó bị lỗi trên Build. Tôi chỉ xóa tệp khóa cục bộ, cam kết và sau đó đẩy. Build đã thất bại ở bước Cài đặt Đá quý nhưng giờ nó đã hoạt động.
David Jones

4
Đối với một dự án sản xuất hiện có thì đây là một ý tưởng tồi tệ. Cuối cùng, bạn sẽ cài đặt một loạt mã mới chưa được kiểm tra (với hệ thống của bạn).
Ý định

Vâng, đây là một ý tưởng tồi và không nên được coi là một sửa chữa. Nó chứng minh rằng câu trả lời khác (về việc có một phiên bản Bundler không khớp) là chính xác. Cài đặt phiên bản chính xác của Bundler nên sửa nó.
Robin Daugherty

Cảm ơn @RobinDaugherty, tôi đã chỉnh sửa câu trả lời để cảnh báo mọi người không được làm điều đó trong sản xuất.
Klonept

Điều này không nên được thực hiện trong sự phát triển. Có một lý do chính đáng cho tệp khóa, nó không nên bị xóa trong một dự án hiện có. Cài đặt phiên bản chính xác của gói trên máy của bạn khắc phục sự cố, xóa Gemfile.locknên được coi là biện pháp cuối cùng vì nó có thể dẫn đến các vấn đề khác.
Robin Daugherty

19

Lý do là môi trường ruby ​​hiện tại của bạn, bạn có một phiên bản khác của gói với phiên bản trong Gemfile.lock .

  • Cách an toàn, cài đặt gói với cùng một phiên bản Gemfile.lock, điều này sẽ không phá vỡ bất cứ điều gì nếu có một số điều không thể xảy ra.
  • Cách khó, chỉ cần loại bỏ Gemfile.lock, và chạy bundle install.

2
Cảm ơn vì điều đó. Chắc chắn mọi người nên sử dụng phiên bản an toàn để không làm xáo trộn môi trường với những viên đá quý mới chưa được kiểm tra . Để cài đặt gói với phiên bản cụ thể, ví dụ: 1.17sử dụnggem install bundler -v 1.17
anka

12

Nếu bạn đã thay đổi phiên bản ruby ​​bạn đang sử dụng rvm use, hãy xóa Gemfile.lock và thử lại.


4

Mở Gemfile.lock, được tìm thấy trong thư mục gốc của thư mục ứng dụng của bạn. Cuộn đến cuối tập tin và xem phiên bản gói được sử dụng. Sau đó, bạn chắc chắn rằng bạn cài đặt phiên bản gói được sử dụng:

gem install bundler -v x.xx.xx

Hoặc - xóa Gemfile.lock và gói nếu bạn đã cài đặt phiên bản gói cao hơn.

Sự lựa chọn là của bạn, bạn của tôi.


3
Tôi không khuyên bạn nên xóa Gemfile.lock vì điều đó cũng sẽ cập nhật tất cả các loại đá quý. Điều này có thể dẫn đến những vấn đề lớn.
Sandro L

@SandroL - hoàn toàn đồng ý với tuyên bố của bạn. Tuy nhiên, nó là một lựa chọn cho những người chấp nhận rủi ro và bị cuốn hút vào kịch.
Georg Keferböck

Cảm ơn bạn. Cài đặt phiên bản tôi có trong Gemfile.lockthư mục đã thực hiện thủ thuật!
viết mã

2

để cài đặt gói phù hợp với việc Gemfile.locksử dụng của bạn :

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

1

Trong trường hợp của tôi, các đề xuất trên không làm việc cho tôi. Của tôi là kịch bản ít khác nhau.

Khi tôi cố gắng cài đặt bundlerbằng cách sử dụng gem install bundler.. Nhưng tôi đã nhận được

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

sau đó tôi đã thử sử dụng và sudo gem install bundlersau đó tôi đã nhận được

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

sau đó tôi đã thử với sudo gem install bundler -n /usr/local/bin(Chỉ/usr/bin làm việc trong trường hợp của tôi).

Và sau đó cài đặt thành công. bundler

EDIT: Tôi sử dụng MacOS, có thể /usr/bintôi không làm việc cho tôi vì lý do đó ( https://stackoverflow.com/a/34989655/3786657 bình luận)


0

Tôi đã có cùng một vấn đề ngày hôm nay. Tôi giải quyết vấn đề này bằng cách loại bỏ bất kỳ PATHtrong .bashrccho cũ rvm.


1
Bạn cứu tôi tôi đã xuất PATH = "$ PATH: $ HOME / .rvm / bin" trong bashrc của tôi, tôi xóa nó và nó hoạt động
bormat

0

Vấn đề của tôi là tôi đang sử dụng RVM và đã kích hoạt phiên bản Ruby sai ...

Hy vọng điều này sẽ giúp ít nhất một người


0

Thêm vào nhiều câu trả lời, vấn đề của tôi bắt nguồn từ việc muốn sử dụng viên ruby ​​của docker làm cơ sở, nhưng sau đó sử dụng rbenv trên đầu trang. Điều này vít lên rất nhiều thứ.

Tôi đã sửa nó trong trường hợp này bằng cách:

  • Phiên bản Gemfile.lock cần cập nhật - thay đổi "BUNDLED VỚI" thành phiên bản mới nhất đã thay đổi thông báo lỗi, do đó có thể đã được yêu cầu
  • trong .bash_profile hoặc .bashrc, bỏ đặt các biến môi trường:
unset GEM_HOME
unset BUNDLE_PATH

Sau đó, rbenv hoạt động tốt. Không chắc chắn làm thế nào những vars env đã được tải ở nơi đầu tiên ...


-2

Tôi đã hạ cấp ruby ​​từ 2.5.x xuống 2.4.x trong trường hợp cụ thể của tôi.


-2

Tôi phải làm rake clean --force. Sau đó đã làm gem install rakevà như vậy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.