tidak dapat memuat file seperti itu - bundler / setup (LoadError)


128

Saya mengatur aplikasi Rails 4 dengan Ruby 2.0, tetapi saya mendapatkan "Aplikasi web tidak dapat dimulai" dan mendapatkan jejak ini:

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 saya adalah:

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 adalah:

Bundler version 1.3.5

ruby -v adalah:

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

gem env adalah:

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 adalah:

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

Tidak GEM_PATHseharusnya /usr/lib/ruby/gems/2.0?

Di dalam virtual host di apache2.conf saya menambahkan:

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

Dan sekarang sudah berfungsi.

Apakah ini cara yang tepat untuk memperbaikinya?

Jawaban:


49

Bisa jadi ada Ruby env sebelumnya diinstal pada sistem Anda sebelum instalasi 2.0? Ini mungkin memiliki GEM_PATH yang ada yang mengarah ke direktori /1.8 yang hanya menyimpan versi 2.0.

Masalah Anda di mana kemungkinan memiliki, kemudian, adalah bahwa Penumpang / Apache sedang mencari di direktori /2.0 padahal sebenarnya permata berada di direktori /1.8. Apache yang Anda beri tahu secara eksplisit untuk menggunakan direktori /1.8 dengan demikian masuk akal untuk memperbaiki masalahnya.

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

Anda mungkin juga mencoba menggunakan Manajer Versi Ruby untuk menangani beberapa Ruby envs.

Beberapa hal yang saya temukan di Google:


202

Saya memiliki kesalahan yang hampir persis sama, dan dapat memperbaikinya sepenuhnya hanya dengan menjalankan:

gem install bundler

Mungkin instalasi bundler Anda rusak atau hilang - itulah yang terjadi dalam kasus saya. Perhatikan bahwa jika hal di atas gagal, Anda dapat mencoba:

sudo gem install bundler

... tetapi secara umum Anda dapat melakukannya tanpa sudo.


2
Ini saya! Pertanyaan - apakah yang sudosebenarnya diperlukan? Saya menggunakan sudotetapi sekarang saya bertanya-tanya apa yang akan terjadi jika saya tidak melakukannya.
Pete

2
Jika Anda menggunakan versi Ruby yang berbeda dari standar sistem, Anda TIDAK perlu menggunakannya sudo! sudo gem ....akan menginstal defaultversi permata, dan (dalam kasus saya, Ubuntu 14.04) sudotidak dapat menjalankan rvm.
Farfromunique

1
Pada sistem macOS saya, saya membutuhkan sudoruby default sistem, tetapi tidak membutuhkannya untuk versi ruby ​​apa pun yang saya instal dengan rvm.
Ben Visness

1
Hanya sebuah catatan untuk mengatakan bahwa ini adalah solusi bagi saya untuk menggunakan Subsistem Windows untuk Linux, setelah pembaruan Windows baru-baru ini. Entah mengapa pembaruan itu menghapus pemasangan ruby ​​RVM saya.
Ben Fulton

1
Hai, saya memiliki masalah yang sama dengan pertanyaan menggunakan ubuntu dengan gem 2.7.6dan ruby 2.5.0p0apa yang harus dilakukan?
TheCrazyProfessor

28

Kemungkinan besar Anda memiliki lebih dari satu Ruby yang diinstal.

Jika Anda menggunakan RVM, Anda mungkin perlu menjalankan:

rvm use system

untuk mengatur versi ruby ​​yang akan digunakan.

Lihat http://rvm.io/rubies/default

ruby -v

akan memberi tahu Anda versi yang sedang Anda gunakan.


25

Anda dapat mencoba menjalankan:

bundle exec rake rails:update:bin

Seperti @Dinesh disebutkan dalam Rails 5:

rails app:update:bin

10

Dalam kasus saya, baris yang ditambahkan ke file konfigurasi apache setelah menginstal penumpang adalah sebagai berikut:

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

Tetapi aplikasi ini membutuhkan Ruby 2.0.0 sehingga butuh beberapa saat, tetapi akhirnya, kesalahan itu diselesaikan setelah menentukan jalur yang berbeda menggunakan 'PassengerRuby' di bawah, dalam file konfigurasi host virtual Apache untuk aplikasi:

...
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...

Ini juga terjadi pada saya. Dalam kasus saya PassengerDefaultRubymengacu pada instalasi lama ruby.
Waseem

8

Saya mendapatkan kesalahan ini di aplikasi Rails baru dengan bundel yang diinstal dengan benar. Mengomentari permata musim semi di Gemfile menyelesaikan masalah.


4
Ini untuk saya tetapi gem install springalih-alih berkomentar.
jakenberg

3

Saya mengalami masalah yang sama, tetapi saya pikir itu karena springcaching beberapa permata dan konfigurasi. Saya memperbaikinya dengan menjalankan gem pristine --all.

Ini mengembalikan permata yang diinstal ke kondisi asli dari file yang terletak di cache permata.

atau Anda bisa mencoba permata Anda

gem pristine your_gem_name

1

Ini terjadi di lingkungan produksi untuk saya.

rm /vendor/bundle

kemudian bundle install --deployment

menyelesaikan masalah.


1

Situasi lain yang mungkin: Anda memiliki banyak pengguna yang ditentukan di lingkungan server Anda. Dalam hal ini, berlari

passenger-config --ruby-command

akan memberi Anda perintah yang diperlukan untuk menentukan nginx/sites-enabled/relevant_applicationfile Anda dengan use case Anda, contoh:

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

Saya memiliki masalah yang sama dan mencoba semua jawaban tanpa hasil.

langkah-langkah yang saya lakukan untuk mereproduksi:

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

Namun bundle installmenginstal Rails, tetapi saya masih punya cannot load such file -- bundler/setup (LoadError)

akhirnya berjalan gem install rails -v 4.2memperbaikinya


1

Versi Bundler mungkin menyebabkan masalah.

Silakan instal bundler dengan nomor versi lain.

Sebagai contoh,

permata instal bundler -v 1.0.10


Dalam kasus saya kesalahan ini terjadi setelah menginstal bundler v2 . Saya menyelesaikannya dengan gem uninstall -a bundler; gem install bundler -v '<2.0'.
Serga

0

Saya punya ini karena ada sesuatu yang buruk di saya vendor/bundle. Tidak ada hubungannya dengan Apache, hanya di dev lokal env.

Untuk memperbaikinya, saya menghapus vendor\bundle, dan juga menghapus referensi untuknya di saya .bundle/configsehingga tidak akan digunakan kembali.

Kemudian, saya bundel ulang (yang kemudian diinstal ke GEM_HOMEbukan vendor/bundledan masalahnya hilang.


0

CATATAN: Perusahaan hosting saya adalah Site5.com dan saya memiliki VPS yang Dikelola.

Saya menambahkan variabel env untuk GEM_HOME dan GEM_PATH ke file .htaccess di direktori public_html saya (alias ke direktori publik di aplikasi rails)

Mereka tidak diperlukan sebelumnya sehingga sesuatu pasti telah berubah di sisi tuan rumah. Itu mendapat kesalahan ini setelah menyentuh file restart.txt untuk me-restart server penumpang.

Dapatkan GEM_PATH oleh:

echo $ GEM_PATH

Dapatkan GEM_HOME dengan:

permata id

 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/

File .htaccess yang diperbarui dengan baris berikut:

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

Bagi saya masalahnya adalah mengaitkan RVM Ruby dengan Penumpang. Jadi saya perlu mengintegrasikan RVM ruby ​​wrapper ke file konfigurasi penumpang.

Saya mencari tahu jalan pembungkus rvm ruby ​​dengan perintah:

passenger-config --ruby-command

Saya mengambil jalur dari hasil dan masuk ke konfigurasi penumpang 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

Saya telah memperbaiki masalah itu dengan membuat proyek uji rel dan menginstal semua permata lalu saya mengganti Gemfile saya saat ini. Buka dengan tes dan semua hal bekerja dengan baik.

Saya pikir ini masalah dari bundlerversi dengan hosting, jadi harap pastikan bahwa hosting bundler adalah versi yang sama dengan proyek Anda.


0

Dalam situasi saya itu adalah masalah izin:

 sudo chmod -R +777 <your_folder_path>

-1: Jangan pernah menempatkan 777 pada file atau direktori. Jika ada pemisahan antara "pemilik", "grup" dan "yang lain", itu karena masalah keamanan.
Florian Doyen

0

Versi versi ruby ​​yang digunakan penumpang phusion berbeda dengan aplikasi rel Anda.

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

Pastikan versi konfigurasi httpd sama dengan aplikasi rails.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.