ไม่สามารถโหลดไฟล์ดังกล่าวได้ - bundler / setup (LoadError)


129

ฉันกำลังตั้งค่าแอปพลิเคชัน Rails 4 ด้วย Ruby 2.0 แต่ฉันได้รับ "แอปพลิเคชันเว็บไม่สามารถเริ่มทำงานได้" และได้รับการติดตามนี้:

cannot load such file -- bundler/setup (LoadError)
  /usr/local/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:53:in `require'
  /usr/local/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:53:in `require'
  /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/lib/phusion_passenger/loader_shared_helpers.rb:212:in `run_load_path_setup_code'
  /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:96:in `preload_app'
  /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:150:in `<module:App>'
  /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:29:in `<module:PhusionPassenger>'
  /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:28:in `<main>'

apache2.conf ของฉันคือ:

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/buildout/apache2/mod_passenger.so
   PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19
   PassengerDefaultRuby /usr/local/bin/ruby

bundle -v คือ:

Bundler version 1.3.5

ruby -v คือ:

ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]

gem env คือ:

RubyGems Environment:
  - RUBYGEMS VERSION: 2.1.5
  - RUBY VERSION: 2.0.0 (2013-06-27 patchlevel 247) [x86_64-linux]
  - INSTALLATION DIRECTORY: /usr/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: /usr/local/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/lib/ruby/gems/1.8/bin
  - SPEC CACHE DIRECTORY: /root/.gem/specs
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /usr/lib/ruby/gems/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /root/.gems/bin
     - /usr/lib/ruby/gems/1.8/bin/
     - /usr/local/bin
     - /usr/bin
     - /bin
     - /usr/bin/X11
     - /usr/games
     - /usr/sbin
     - /sbin

echo $GEM_PATH คือ:

/usr/lib/ruby/gems/1.8:/usr/lib/ruby/gems/1.8

ไม่ควรGEM_PATHจะเป็น/usr/lib/ruby/gems/2.0?

ภายในโฮสต์เสมือนใน apache2.conf ฉันเพิ่ม:

SetEnv GEM_HOME /usr/lib/ruby/gems/1.8

และตอนนี้ก็ใช้งานได้แล้ว

เป็นวิธีที่ถูกต้องในการแก้ไขปัญหานี้หรือไม่?

คำตอบ:


49

อาจเป็นไปได้ว่ามีการติดตั้ง Ruby env ก่อนหน้านี้ในระบบของคุณก่อนที่คุณจะติดตั้ง 2.0? สิ่งนี้อาจมี GEM_PATH ที่นำไปสู่ไดเร็กทอรี /1.8 ซึ่งการติดตั้งเวอร์ชัน 2.0 จะเก็บไว้

ปัญหาที่คุณอาจพบคือ Passenger / Apache กำลังมองหาในไดเร็กทอรี /2.0 เมื่ออัญมณีอยู่ในไดเร็กทอรี /1.8 การบอก apache อย่างชัดเจนของคุณให้ใช้ไดเร็กทอรี /1.8 จึงเหมาะสมที่จะแก้ไขปัญหา

SetEnv GEM_HOME /usr/lib/ruby/gems/1.8

คุณอาจลองใช้Ruby Version Managerเพื่อจัดการกับ Ruby envs หลาย ๆ ตัว

บางสิ่งที่ฉันพบใน Google:


203

ฉันมีข้อผิดพลาดเดียวกันเกือบทั้งหมดและสามารถแก้ไขได้อย่างสมบูรณ์เพียงแค่เรียกใช้:

gem install bundler

เป็นไปได้ว่าการติดตั้ง Bundler ของคุณเสียหายหรือขาดหายไปนั่นคือสิ่งที่เกิดขึ้นในกรณีของฉัน โปรดทราบว่าหากข้างต้นล้มเหลวคุณสามารถลอง:

sudo gem install bundler

... แต่โดยทั่วไปคุณสามารถทำได้โดยไม่ต้องใช้ sudo


2
นี่คือฉัน! คำถาม - sudoจำเป็นจริงหรือ? ฉันเคยใช้sudoแต่ตอนนี้ฉันสงสัยว่าจะเกิดอะไรขึ้นถ้าฉันไม่มี
พีท

2
หากคุณใช้ Ruby เวอร์ชันอื่นที่ไม่ใช่ค่าเริ่มต้นของระบบคุณไม่จำเป็นต้องใช้sudo! sudo gem ....จะติดตั้งdefaultเวอร์ชันของอัญมณีและ (ในกรณีของฉัน Ubuntu 14.04) sudoไม่สามารถรัน rvm ได้
Farfromunique

1
ในระบบ macOS ของฉันฉันต้องการsudoทับทิมเริ่มต้นของระบบ แต่ไม่จำเป็นต้องใช้กับทับทิมรุ่นใด ๆ ที่ฉันติดตั้งด้วย rvm
Ben Visness

1
เพียงแค่ทราบว่านี่เป็นวิธีแก้ปัญหาสำหรับฉันโดยใช้ Windows Subsystem for Linux หลังจากการอัปเดต Windows ล่าสุด ด้วยเหตุผลบางประการการอัปเดตจึงทำให้การติดตั้งทับทิม RVM ของฉันหายไป
Ben Fulton

1
สวัสดีฉันมีปัญหาเดียวกันกับคำถามที่ใช้ ubuntu ด้วยgem 2.7.6และruby 2.5.0p0จะทำอย่างไร?
TheCrazyProfessor

28

คุณมักจะติดตั้ง Ruby มากกว่าหนึ่งตัว

หากคุณใช้ RVM คุณอาจต้องเรียกใช้:

rvm use system

เพื่อตั้งค่าเวอร์ชันของทับทิมที่จะใช้

ดูhttp://rvm.io/rubies/default

ruby -v

จะบอกเวอร์ชันที่คุณใช้อยู่


26

คุณสามารถลองเรียกใช้:

bundle exec rake rails:update:bin

ดังที่ @Dinesh กล่าวไว้ใน Rails 5:

rails app:update:bin

10

ในกรณีของฉันบรรทัดต่อท้ายไฟล์กำหนดค่า apache หลังจากติดตั้งผู้โดยสารมีดังนี้:

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-.0.24/buildout/apache2/mod_passenger.so 
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-4.0.24 
PassengerDefaultRuby /usr/bin/ruby1.8

แต่แอปต้องใช้ Ruby 2.0.0 ดังนั้นฉันจึงใช้เวลาสักพัก แต่ในที่สุดข้อผิดพลาดก็ได้รับการแก้ไขหลังจากระบุเส้นทางอื่นโดยใช้ 'PassengerRuby' ด้านล่างภายในไฟล์กำหนดค่าโฮสต์เสมือน Apache สำหรับแอป:

...
VirtualHost *:80>
  ServerName www.yourhost.com

 **PassengerRuby /home/user/.rvm/gems/ruby-2.0.0-p247**
  # !!! Be sure to point DocumentRoot to 'public'!
  DocumentRoot /somewhere/public    
  <Directory /somewhere/public>
     # This relaxes Apache security settings.
     AllowOverride all
     # MultiViews must be turned off.
     Options -MultiViews
  </Directory>
</VirtualHost...

นี่เป็นกรณีของฉันเช่นกัน ในกรณีของฉันPassengerDefaultRubyหมายถึงการติดตั้งทับทิมแบบเก่า
Waseem

8

ฉันได้รับข้อผิดพลาดนี้ในแอป Rails ใหม่ที่ติดตั้งชุดอย่างถูกต้อง การแสดงความคิดเห็นเกี่ยวกับอัญมณีฤดูใบไม้ผลิใน Gemfile ช่วยแก้ปัญหาได้


4
นี่คือสำหรับฉัน แต่gem install springแทนที่จะแสดงความคิดเห็น
jakenberg

3

ฉันพบปัญหาเดียวกัน แต่ฉันคิดว่ามันเกิดจากการspringแคชอัญมณีและการกำหนดค่าบางอย่าง ฉันแก้ไขโดยการวิ่งgem pristine --allฉันคงได้โดยการทำงาน

สิ่งนี้จะคืนค่าอัญมณีที่ติดตั้งให้อยู่ในสภาพที่สมบูรณ์จากไฟล์ที่อยู่ในแคชอัญมณี

หรือคุณสามารถลองอัญมณีของคุณเช่น

gem pristine your_gem_name

1

สิ่งนี้เกิดขึ้นในสภาพแวดล้อมการผลิตสำหรับฉัน

rm /vendor/bundle

แล้วก็ bundle install --deployment

แก้ไขปัญหา


1

สถานการณ์อื่น ๆ ที่เป็นไปได้: คุณมีผู้ใช้หลายคนที่กำหนดไว้ในสภาพแวดล้อมเซิร์ฟเวอร์ของคุณ ในกรณีนั้นให้เรียกใช้

passenger-config --ruby-command

จะให้คำสั่งที่จำเป็นแก่คุณในการระบุnginx/sites-enabled/relevant_applicationไฟล์ของคุณด้วยกรณีการใช้งานของคุณเช่น:

passenger-config was invoked through the following Ruby interpreter:
Command: /home/other_user/.rbenv/versions/2.4.5/bin/ruby
Version: ruby 2.4.5p335 (2018-10-18 revision 65137) [x86_64-linux]
To use in Apache: PassengerRuby /home/other_user/.rbenv/versions/2.4.5/bin/ruby
To use in Nginx : passenger_ruby /home/other_user/.rbenv/versions/2.4.5/bin/ruby
To use with Standalone: /home/other_user/.rbenv/versions/2.4.5/bin/ruby /usr/bin/passenger start

1

ฉันมีปัญหาเดียวกันและลองคำตอบทั้งหมดโดยไม่มีโชค

ขั้นตอนที่ฉันทำซ้ำ:

  1. rvm instal 2.1.10
  2. rvm gemset create my_gemset
  3. rvm use 2.1.10@my_gemset
  4. bundle install

อย่างไรก็ตามbundle installติดตั้ง Rails แต่ฉันยังได้รับ cannot load such file -- bundler/setup (LoadError)

ในที่สุดก็gem install rails -v 4.2แก้ไขได้


1

เวอร์ชัน Bundler อาจทำให้เกิดปัญหา

โปรดติดตั้งบันเดิลเลอร์ด้วยหมายเลขเวอร์ชันอื่น

ตัวอย่างเช่น,

การติดตั้ง gem Bundler -v 1.0.10


ในกรณีของข้อผิดพลาดนี้เกิดขึ้นหลังจากติดตั้งBundler v2 ฉันแก้ไขด้วยgem uninstall -a bundler; gem install bundler -v '<2.0'.
SergA

0

ฉันมีสิ่งนี้เพราะมีบางอย่างที่ไม่ดีอยู่ในvendor/bundleไฟล์. ไม่มีอะไรเกี่ยวข้องกับ Apache เพียงแค่ใน dev env ท้องถิ่น

ในการแก้ไขฉันลบvendor\bundleและลบการอ้างอิงถึงมันในของฉัน.bundle/configเพื่อไม่ให้ถูกนำกลับมาใช้อีก

จากนั้นฉันรวมกลุ่มอีกครั้ง (ซึ่งจากนั้นติดตั้งGEM_HOMEแทนvendor/bundleและปัญหาก็หายไป


0

หมายเหตุ: บริษัท โฮสติ้งของฉันคือ Site5.com และฉันมี VPS ที่มีการจัดการ

ฉันเพิ่มตัวแปร env สำหรับทั้ง GEM_HOME และ GEM_PATH ลงในไฟล์. htaccess ในไดเร็กทอรี public_html ของฉัน (นามแฝงไปยังไดเร็กทอรีสาธารณะในแอพทางรถไฟ)

พวกเขาไม่จำเป็นมาก่อนดังนั้นจึงต้องมีการเปลี่ยนแปลงบางอย่างในฝั่งโฮสต์ มีข้อผิดพลาดนี้หลังจากแตะไฟล์ restart.txt เพื่อรีสตาร์ทเซิร์ฟเวอร์ผู้โดยสาร

รับ GEM_PATH โดย:

ก้อง $ GEM_PATH

รับ GEM_HOME โดย:

อัญมณี env

 RubyGems Environment:
   - RUBYGEMS VERSION: 2.0.14
   - RUBY VERSION: 2.0.0 (2013-11-22 patchlevel 353) [x86_64-linux]
   - INSTALLATION DIRECTORY: /home/username/ruby/gems
   - RUBY EXECUTABLE: /usr/local/ruby20/bin/ruby
   - EXECUTABLE DIRECTORY: /home/username/ruby/gems/bin
   - RUBYGEMS PLATFORMS:
     - ruby
     - x86_64-linux
   - GEM PATHS:
      - /home/username/ruby/gems
      - /usr/local/ruby2.0/lib64/ruby/gems/
   - GEM CONFIGURATION:
      - :update_sources => true
      - :verbose => true
      - :backtrace => false
      - :bulk_threshold => 1000
      - "gem" => "--remote --gen-rdoc --run-tests"
      **- "gemhome" => "/home/username/ruby/gems"**
      - "gempath" => ["/home/username/ruby/gems", "/usr/local/ruby2.0/lib64/ruby/gems/"]
      - "rdoc" => "--inline-source --line-numbers"
   - REMOTE SOURCES:
      - https://rubygems.org/

อัปเดตไฟล์. htaccess ด้วยบรรทัดต่อไปนี้:

SetEnv GEM_HOME /usr/local/ruby2.0/lib64/ruby/gems/
SetEnv GEM_PATH /home/username/ruby/gems:/usr/local/ruby20/lib64/ruby/gems/:/home/username/ruby/gems:/usr/

0

สำหรับฉันปัญหาคือการเชื่อมโยง RVM Ruby กับ Passenger ดังนั้นฉันต้องรวม RVM ruby ​​wrapper เข้ากับไฟล์ config ของผู้โดยสาร

ฉันค้นหาเส้นทาง rvm ruby ​​wrapper ด้วยคำสั่ง:

passenger-config --ruby-command

ฉันใช้เส้นทางจากผลลัพธ์และป้อนการกำหนดค่าผู้โดยสารในnginx/passenger.conf:

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /usr/local/rvm/gems/ruby-2.3.1/wrappers/ruby;

0

ฉันได้แก้ไขปัญหานั้นด้วยการสร้างโครงการรางทดสอบและติดตั้งอัญมณีทั้งหมดจากนั้นฉันได้แทนที่ Gemfile.lock ปัจจุบันของฉันด้วยการทดสอบและทุกอย่างก็ใช้ได้ดี

ฉันคิดว่าปัญหานี้เกิดจากbundlerเวอร์ชันที่มีโฮสติ้งดังนั้นโปรดตรวจสอบให้แน่ใจว่าโฮสต์บันเดิลเลอร์เป็นเวอร์ชันเดียวกับโปรเจ็กต์ของคุณ


0

ในสถานการณ์ของฉันมันเป็นเรื่องของสิทธิ์:

 sudo chmod -R +777 <your_folder_path>

-1: อย่าใส่ 777 ในไฟล์หรือไดเรกทอรี หากมีการแบ่งแยกระหว่าง "เจ้าของ" "กลุ่ม" และ "คนอื่น ๆ " นั่นเป็นเพราะเรื่องความปลอดภัย
Florian Doyen

0

เวอร์ชันของทับทิมที่ผู้โดยสารใช้ฟิวชั่นแตกต่างกับแอปรางของคุณ

<IfModule mod_passenger.c>
  PassengerRoot /usr/local/rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/passenger-6.0.2
  PassengerDefaultRuby /usr/local/rbenv/versions/2.5.3/bin/ruby
</IfModule>

ตรวจสอบให้แน่ใจว่าเวอร์ชันบน httpd config เหมือนกันกับแอพ rail


0

หลังจากใช้เวลานานมากลองทำตามคำตอบเหล่านี้หลังจากรหัสด้านล่างมันได้ผลสำหรับฉัน ก่อนทำแต่ต้องแน่ใจว่าไม่มีปัญหาในการอัพเดท :)

gem update --system

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