find_spec_for_exe ': ไม่สามารถหา gem bundler (> = 0.a) (Gem :: GemNotFoundException)


218

ฉันใช้sudo bundle installและนั่นอาจเป็นสาเหตุของปัญหาหรือไม่

ตอนนี้ฉันมี:

  • gem -v 2.6.14
  • ruby -v ruby 2.3.5p376 (2017-09-14 รุ่นที่ปรับปรุง 59905) [x86_64-darwin15]
  • jekyll -v jekyll 3.6.2
  • bundle -vBundler เวอร์ชั่น 1.16.0.pre.3

ฉันได้รับข้อผิดพลาดต่อไปนี้เมื่อพยายามเรียกใช้bundle exec jekyll serveหรือเพียงแค่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

นอกจากนี้เมื่อเข้าถึงโฟลเดอร์ที่ฉันมีบล็อกของcd my_pathฉันฉันได้รับข้อความต่อไปนี้:

VM ใช้ Gemfile ของคุณเพื่อเลือก Ruby ทุกอย่างดี - Heroku ทำเช่นนั้นคุณสามารถละเว้นคำเตือนเหล่านี้ด้วย 'rvm rvmrc คำเตือนละเว้น / Library / WebServer / เอกสาร / บล็อก / Gemfile' ในการเพิกเฉยต่อคำเตือนสำหรับไฟล์ทั้งหมดให้เรียกใช้ 'rvm rvmrc warning ละเว้น allGemfiles' รุ่นล่ามทับทิมที่ไม่รู้จัก (ไม่รู้วิธีจัดการ): RUBY_VERSION

ฉันไม่ทราบวิธีแก้ปัญหานี้ ฉันแค่ต้องการสร้างบล็อกคงที่ของฉันและโดยสุจริตฉันไม่มีความคิดเกี่ยวกับ Ruby, Gem หรือ Bundle :) ดังนั้นฉันจะขอขอบคุณข้อมูลเชิงลึกบางอย่าง!


นี่อาจช่วยได้
บ้าง

@Cyzanfar ขอบคุณสำหรับสิ่งนั้น! ฉันลองแล้วตอนนี้ได้รับข้อผิดพลาดใหม่ในกระบวนการ: stackoverflow.com/questions/47035080//
Alvaro

คำตอบ:


364

ปัญหาในกรณีของฉันคือGemfile.lockไฟล์มีBUNDLED_WITHรุ่น1.16.1และgem install bundlerรุ่นที่ติดตั้ง2.0.1ดังนั้นจึงมีรุ่นที่ไม่ตรงกันเมื่อมองไปทางขวาโฟลเดอร์

gem install bundler -v 1.16.1 ซ่อมมัน

แน่นอนคุณยังสามารถเปลี่ยนของคุณGemfile.lock's BUNDLED_WITHด้วยสุดท้ายbundlerรุ่นและใช้ซอฟต์แวร์ที่ผ่านมาเป็นSam3000แสดงให้เห็น


15
คุณอาจต้องการเปลี่ยนBUNDLED_WITHเวอร์ชั่นเป็น Bundler เวอร์ชันล่าสุด สิ่งนี้ใช้งานได้สำหรับฉันและช่วยฉันด้วยว่าต้องใช้ซอฟต์แวร์ที่ล้าสมัย :)
349

5
Bundler 2 เพิ่งเปิดตัวดังนั้นหากคุณไม่ได้ระบุข้างต้นใน Dockerfile ของคุณคุณจะได้รับข้อผิดพลาดนี้bundler.io/blog/2019/01/03/announcing-bundler-2.html
cameck

สวัสดี @ antonio-tapiador ฉันมีปัญหานี้ แต่ฉันอยู่บน windows (ไม่สามารถเปลี่ยนเป็น linux ได้) ฉันทำงาน gem install bundler -v 1.16.1และตอนนี้ถ้าgem.bat list bundler ฉันเรียกใช้ ฉันจะได้รับตัวรวม (2.0.1, 1.16.1, 1.9.6) ฉันไม่สามารถเปลี่ยนเวอร์ชันปัจจุบัน: การดำเนินการbundle.bat _1.16.1 installให้ข้อผิดพลาดนี้แก่ฉัน: Could not find command "_1.16.1". คุณมีความคิดใด ๆ ดังนั้นฉันไม่ต้องสร้างคำถามใหม่ ขอบคุณ!
เยอรมัน

ไม่เป็นไรฉันหายไปขีดล่างเมื่อสิ้นสุดรุ่น
เยอรมัน

ขอบคุณ วิธีนี้แก้ปัญหาเดียวกันของฉันโดยใช้ ruby ​​v2.5.1p57
widi83

132
gem update --system

จะอัปเดตทับทิมและจะแก้ไขปัญหา


3
เพื่อชี้แจง - ตาม @noraj ชี้ให้เห็น - ปัญหาถูกนำมาใช้ใน Bundler เวอร์ชันใหม่ หากคุณไปที่ลิงค์ทางออกคือการอัพเดต RubyGems
ReggieB

1
gem update --systemทำงานให้ฉัน: ruby 2.5.0 , bundler 2.0.1 , 10.13.6macOS
Jagdeep Singh

74

ปรับปรุง:

ตามคำตอบของ @ noraj และความคิดเห็นของ @Niels Kristian คำสั่งต่อไปนี้ควรทำงาน

gem update --system
bundle install

ฉันเขียนสิ่งนี้ในกรณีที่มีคนได้รับปัญหาเช่นเดียวกับฉัน

gem install bundler แสดงให้เห็นว่าทุกสิ่งติดตั้งได้ดี

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

เมื่อฉันพิมพ์bundleมีข้อผิดพลาด:

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

และในโฟลเดอร์/Users/nikkov/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/ไม่มีbundler-1.16.0โฟลเดอร์

ฉันแก้ไขสิ่งนี้ด้วยsudo gem install bundler


6
หลังจากที่คุณ "แก้ไข" ให้แน่ใจว่าคุณแก้ไขสิทธิ์ไดเรกทอรีของคุณใน. rvm และ. gem
humanity

1
@ มนุษยชาติอธิบายรายละเอียดเพิ่มเติมได้โปรดซื้อแก้ไขคำตอบของฉัน
Nik Kov

1
@ มนุษยชาติ chrs สำหรับคำตอบของคุณ - คุณจะสามารถอธิบายสิ่งที่คุณหมายถึงโดยแก้ไขสิทธิ์ไดเรกทอรีของคุณใน. rvm และ. gem?
BKSpurgeon

1
@Nik kov ตำแหน่งของโฟลเดอร์. rvm และ. gem อาจอยู่ในโฟลเดอร์ภายในบ้านของคุณ พยายามเปลี่ยนสิทธิ์ของพวกเขาโดยคำสั่ง chmod มันใช้งานได้สำหรับฉัน
Souravirus

4
การติดตั้ง sudo gem เป็นวิธีปฏิบัติที่ไม่ดีในกรณีปกติการติดตั้ง gem ทั้งหมดควรทำงานโดยไม่ต้องใช้ sudo
iamdi

33

คำตอบที่แท้จริงอยู่ที่นี่หากคุณพยายามติดตั้ง Bundler 2.0.1 หรือ 2.0.0 เนื่องจาก Bundler ต้องการ RubyGems v3.0.0

เมื่อวานฉันเปิดตัว Bundler 2.0 ที่แนะนำการเปลี่ยนแปลงจำนวนมาก หนึ่งในการเปลี่ยนแปลงเหล่านั้นคือการตั้งค่า Bundler ให้ต้องการ RubyGems v3.0.0 หลังจากเปิดตัวเป็นที่ชัดเจนว่าผู้ใช้ของเราจำนวนมากกำลังประสบปัญหากับ Bundler 2 ซึ่งต้องการ RubyGems เวอร์ชันใหม่จริงๆ

เราได้รับฟังคำติชมจากผู้ใช้อย่างใกล้ชิดและได้ตัดสินใจผ่อนคลายข้อกำหนดของ RubyGems เป็น v2.5.0 อย่างน้อยที่สุด เราได้เปิดตัว Bundler เวอร์ชันใหม่ v2.0.1 ที่ปรับเปลี่ยนข้อกำหนดนี้

สำหรับข้อมูลเพิ่มเติมโปรดดู: https://bundler.io/blog/2019/01/04/an-update-on-the-bundler-2-release.html


1
ขอบคุณลิงค์ของคุณช่วยฉันสักครู่จากปัญหา googling
Ilya Konyukhov

Capistrano ล้มเหลวในเครื่องใหม่ แต่ไม่ใช่เครื่องเก่า ปัญหานี้ได้รับการแก้ไขสำหรับฉัน
CWitty

1
ไม่สามารถเป็น "คำตอบที่แท้จริง" สำหรับคำถามของ OP เนื่องจาก Bundler 2.0 ไม่มีอยู่ในปี 2560 แม้ว่าผู้คนจะพบหน้านี้อย่างแน่นอนเพราะอาการเหมือนกัน
Philihp Busby

ฉันกำลังประสบปัญหากับ Bundler 2.0.1
Fabrizio

นี่คือการเปลี่ยนแปลงที่ทำลายอื่น ๆ ในเวอร์ชัน 2.0.0: github.com/bundler/bundler/releases/tag/v2.0.0
Joshua Pinter

31

มันคงที่:

  1. ลบ Gemfile.lock rm Gemfile.lock
  2. วิ่งbundle installอีกครั้ง

แก้ไข: ไม่ได้ทำในการผลิต!

สำหรับการผลิตให้ไปที่คำตอบนี้: https://stackoverflow.com/posts/54083113/revisions


ฉันใช้ Visual Studio Code และอัปโหลดและเผยแพร่ผ่าน Azure Devops ซึ่งเป็นจุดที่มันล้มเหลวใน Build ฉันเพิ่งลบไฟล์ล็อคในเครื่องมุ่งมั่นแล้วผลัก บิลด์ล้มเหลวในขั้นตอนการติดตั้งพลอยแต่ตอนนี้มันใช้งานได้แล้ว
David Jones

4
สำหรับโครงการผลิตที่มีอยู่นี่เป็นความคิดที่แย่มาก คุณจะต้องติดตั้งรหัสใหม่ที่ยังไม่ทดลอง (กับระบบของคุณ)
Intentss

ใช่นี่เป็นความคิดที่ไม่ดีและไม่ควรพิจารณาการแก้ไข มันพิสูจน์ได้ว่าคำตอบอื่น ๆ (เกี่ยวกับการมีเวอร์ชั่น Bundler ที่ไม่ตรงกัน) นั้นถูกต้อง การติดตั้ง Bundler เวอร์ชันที่ถูกต้องควรแก้ไข
Robin Daugherty

ขอบคุณ @RobinDaugherty ฉันได้แก้ไขคำตอบเพื่อเตือนทุกคนไม่ให้ทำ
Klonept

สิ่งนี้ไม่ควรทำในการพัฒนาเช่นกัน มีเหตุผลที่ดีสำหรับไฟล์ล็อคไม่ควรลบในโครงการที่มีอยู่ การติดตั้ง Bundler เวอร์ชันที่ถูกต้องบนเครื่องของคุณแก้ไขปัญหาการลบGemfile.lockควรถูกพิจารณาเป็นทางเลือกสุดท้ายเนื่องจากอาจทำให้เกิดปัญหาอื่น ๆ
Robin Daugherty

19

เหตุผลก็คือสภาพแวดล้อมทับทิมปัจจุบันของคุณคุณมีรุ่นที่แตกต่างกันของ Bundler Gemfile.lockกับรุ่นใน

  • วิธีที่ปลอดภัยติดตั้ง Bundler ด้วยเวอร์ชันเดียวกันGemfile.lockซึ่งจะไม่ทำลายอะไรเลยหากมีบางอย่างเกิดขึ้น
  • วิธีที่ยากเพียงแค่ลบและวิ่งGemfile.lockbundle install

2
ขอบคุณสำหรับสิ่งนั้น แน่นอนว่าทุกคนควรใช้เวอร์ชั่นที่ปลอดภัยเพื่อไม่ทำลายสิ่งแวดล้อมด้วยอัญมณีที่ยังไม่ผ่านการทดสอบ ในการติดตั้ง Bundler กับรุ่นเฉพาะเช่น1.17ใช้gem install bundler -v 1.17
anka

12

หากคุณเปลี่ยนรุ่นทับทิมที่คุณใช้ด้วยrvm useให้ลบ Gemfile.lock แล้วลองอีกครั้ง


4

เปิด Gemfile.lock ซึ่งจะพบได้ในรูทของโฟลเดอร์แอปของคุณ เลื่อนไปที่จุดสิ้นสุดของไฟล์และดูเวอร์ชันบันเดิลที่ใช้ จากนั้นคุณต้องแน่ใจว่าคุณติดตั้งเวอร์ชันบันเดิลที่ใช้:

gem install bundler -v x.xx.xx

หรือ - ลบ Gemfile.lock และบันเดิลหากคุณติดตั้ง Bundler เวอร์ชั่นสูงกว่า

ทางเลือกเป็นของคุณเพื่อนของฉัน


3
ฉันจะไม่แนะนำให้ลบ Gemfile.lock เพราะนั่นจะเป็นการอัพเดตพลอยทั้งหมด สิ่งนี้สามารถนำไปสู่ปัญหาใหญ่
Sandro L

@SandroL - เห็นด้วยอย่างยิ่งกับคำสั่งของคุณ อย่างไรก็ตามมันเป็นตัวเลือกสำหรับผู้ที่มีความเสี่ยงและชักชวนให้เล่นละคร
Georg Keferböck

ขอบคุณ. การติดตั้งเวอร์ชันที่ฉันมีในGemfile.lockโฟลเดอร์นั้นเป็นเคล็ดลับ!
codeadventurer

2

การติดตั้ง Bundler ที่ตรงกับการGemfile.lockใช้งานของคุณ:

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

1

ในกรณีของฉันคำแนะนำข้างต้นไม่ได้ผลสำหรับฉัน ฉันเป็นสถานการณ์ที่แตกต่างกันเล็กน้อย

เมื่อฉันพยายามติดตั้งbundlerโดยใช้gem install bundler.. แต่ฉันก็เริ่มขึ้น

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

จากนั้นฉันลองใช้sudo gem install bundlerแล้วฉันก็เริ่มได้

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

จากนั้นฉันก็ลองด้วยsudo gem install bundler -n /usr/local/bin(แค่/usr/binทำงานในกรณีของฉัน)

จากนั้นทำการติดตั้งสำเร็จ bundler

แก้ไข: ฉันใช้ MacOS อาจ/usr/binไม่ทำงานสำหรับฉันด้วยเหตุผลนั้น ( https://stackoverflow.com/a/34989655/3786657ความคิดเห็น)


0

ฉันมีปัญหาเดียวกันวันนี้ ผมแก้ปัญหานี้โดยการลบใด ๆPATHในสำหรับเก่า.bashrcrvm


1
คุณช่วยฉันฉันได้ส่งออก PATH = "$ PATH: $ HOME / .rvm / bin" ใน bashrc ของฉันฉันลบออกและใช้งานได้
bormat

0

ปัญหาของฉันคือฉันใช้ RVM และเปิดใช้งานรุ่น Ruby ผิด ...

หวังว่าจะช่วยอย่างน้อยหนึ่งคน


0

ปัญหาของฉันเกิดจากความต้องการใช้ทับทิมของนักเทียบท่าเป็นฐาน แต่จากนั้นใช้ rbenv ด้านบน สิ่งนี้ทำให้สิ่งต่างๆมากมายหมดไป

ฉันแก้ไขมันในกรณีนี้โดย:

  • รุ่น Gemfile.lock ไม่จำเป็นต้องอัปเดต - เปลี่ยน "BUNDLED WITH" เป็นเวอร์ชันล่าสุดได้ที่จุดเดียวเปลี่ยนข้อความแสดงข้อผิดพลาดดังนั้นอาจจำเป็นต้องใช้
  • ใน. bash_profile หรือ. bashrc โดยยกเลิกการตั้งค่าตัวแปรสภาพแวดล้อม:
unset GEM_HOME
unset BUNDLE_PATH

หลังจากนั้น rbenv ทำงานได้ดี ไม่แน่ใจว่า env vars เหล่านั้นถูกโหลดมาตั้งแต่แรกได้อย่างไร ...



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.