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?

Mr_Nizzle
sumber

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:

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

Andrew Faulkner
sumber
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.

Michael Guild
sumber
25

Anda dapat mencoba menjalankan:

bundle exec rake rails:update:bin

Seperti @Dinesh disebutkan dalam Rails 5:

rails app:update:bin
zolter
sumber
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...
pengguna2997993
sumber
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.

nachbar
sumber
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
NM Pennypacker
sumber
1

Ini terjadi di lingkungan produksi untuk saya.

rm /vendor/bundle

kemudian bundle install --deployment

menyelesaikan masalah.

vanboom
sumber
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
Jerome
sumber
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

Sherif Elkassaby
sumber
1

Versi Bundler mungkin menyebabkan masalah.

Silakan instal bundler dengan nomor versi lain.

Sebagai contoh,

permata instal bundler -v 1.0.10

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

thooloolman
sumber
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/
Rob Little
sumber
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;
Gediminas
sumber
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.

hsul4n
sumber
0

Dalam situasi saya itu adalah masalah izin:

 sudo chmod -R +777 <your_folder_path>
petrov
sumber
-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.

giapnh
sumber