böyle bir dosya yüklenemiyor - paketleyici / kurulum (LoadError)


128

Rails 4 uygulamasını Ruby 2.0 ile ayarlıyorum, ancak "Web uygulaması başlatılamadı" mesajı alıyorum ve şu izlemeyi alıyorum:

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'um:

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 dır-dir:

Bundler version 1.3.5

ruby -v dır-dir:

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

gem env dır-dir:

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 dır-dir:

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

Gerekmiyor GEM_PATHolmak /usr/lib/ruby/gems/2.0?

Apache2.conf'daki sanal konağın içine şunu ekledim:

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

Ve şimdi çalışıyor.

Bunu düzeltmenin doğru yolu bu mu?

Yanıtlar:


49

2.0 kurulumunuzdan önce sisteminize önceden kurulmuş bir Ruby envanteri olabilir mi? Bu, sürüm 2.0 kurulumunun basitçe sakladığı /1.8 dizinine götüren mevcut bir GEM_PATH'e sahip olabilir.

Muhtemelen yaşadığınız problem, Passenger / Apache'nin mücevherlerin /1.8 dizinindeyken /2.0 dizinine bakmasıydı. Apache'ye açıkça /1.8 dizinini kullanmasını söylemeniz sorunu çözmek için mantıklıdır.

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

Birden çok Ruby ortamını işlemek için Ruby Sürüm Yöneticisini kullanmayı da deneyebilirsiniz .

Google'da bulduğum bazı şeyler:


203

Neredeyse tamamen aynı hatayı aldım ve şunu çalıştırarak tamamen düzeltebildim:

gem install bundler

Paket kurulumunuz bozuk veya eksik olabilir - benim durumumda olan buydu. Yukarıdakiler başarısız olursa şunları deneyebileceğinizi unutmayın:

sudo gem install bundler

... ama genellikle sudo olmadan da yapabilirsiniz.


2
Bu bendim! Soru - sudogerçekten gerekli mi? Kullandım sudoama şimdi yapmasaydım ne olurdu merak ediyorum.
Pete

2
Ruby'nin sistem varsayılanından farklı bir sürümünü kullanıyorsanız, KULLANMAMALISINIZ sudo! gem'in sürümünü sudo gem ....yükleyecektir defaultve (benim durumumda, Ubuntu sudo14.04 ) rvm'yi çalıştıramaz.
Farfromunique

1
MacOS sistemimde, sudosistem varsayılan yakutuna ihtiyacım vardı, ancak rvm ile yüklediğim Ruby'nin herhangi bir sürümü için buna ihtiyacım yoktu.
Ben Visness

1
Son Windows güncellemesinden sonra Linux için Windows Alt Sistemini kullanarak bunun benim için bir çözüm olduğunu söylemek için bir not. Bazı nedenlerden dolayı güncelleme, RVM ruby ​​kurulumlarımı patlattı.
Ben Fulton

1
Merhaba, ubuntu'yu kullanan soruyla aynı sorunu yaşıyorum gem 2.7.6ve ruby 2.5.0p0ne yapmalı?
TheCrazyProfessor

28

Büyük olasılıkla birden fazla Ruby kurmuşsunuzdur.

RVM kullanıyorsanız, muhtemelen şunları çalıştırmanız gerekir:

rvm use system

Kullanılacak ruby ​​sürümünü ayarlamak için.

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

ruby -v

size şu anda kullandığınız sürümü söyleyecektir.


25

Çalıştırmayı deneyebilirsiniz:

bundle exec rake rails:update:bin

@Dinesh'in Rails 5'te bahsettiği gibi:

rails app:update:bin

10

Benim durumumda, yolcu yükledikten sonra apache yapılandırma dosyasına eklenen satırlar aşağıdaki gibiydi:

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

Ancak uygulama Ruby 2.0.0 gerektirdiğinden biraz zaman aldı, ancak sonunda, uygulama için Apache sanal ana bilgisayar yapılandırma dosyasında aşağıdaki 'PassengerRuby' kullanılarak farklı bir yol belirledikten sonra hata çözüldü:

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

Benim için de durum buydu. Benim durumumda PassengerDefaultRuby, eski bir yakut enstalasyonundan bahsediliyordu.
Waseem

8

Bu hatayı, paketin doğru şekilde yüklenmiş olduğu yeni bir Rails uygulamasında aldım. Gemfile'daki bahar cevherini yorumlamak sorunu çözdü.


4
Bu benim için ama gem install springyorum yapmak yerine.
jakenberg

3

Ben de aynı sorunla karşılaştım, ancak bunun springbazı mücevherleri ve yapılandırmaları önbelleğe almaktan kaynaklandığını düşünüyorum . Koşarak düzelttim gem pristine --all.

Bu, yüklü mücevherleri mücevher önbelleğinde bulunan dosyalardan bozulmamış duruma geri yükler.

veya sadece cevheriniz için deneyebilirsiniz

gem pristine your_gem_name

1

Bu benim için üretim ortamında oluyordu.

rm /vendor/bundle

sonra bundle install --deployment

sorunu çözdü.


1

Diğer olası durum: sunucu ortamınızda tanımlanmış birden çok kullanıcınız var. Bu durumda koşarak

passenger-config --ruby-command

, nginx/sites-enabled/relevant_applicationdosyanızı kullanım durumunuzla belirtmeniz için gerekli komutu verecektir , örneğin:

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

Ben de aynı sorunu yaşadım ve tüm cevapları şanssız denedim.

yeniden üretmek için yaptığım adımlar:

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

ancak bundle installRails yüklü, ancak hala var cannot load such file -- bundler/setup (LoadError)

sonunda koşmak, gem install rails -v 4.2düzeltmek


1

Bundler Sürümü soruna neden olabilir.

Lütfen paketleyiciyi başka bir sürüm numarasıyla yükleyin.

Örneğin,

gem yükleme paketleyicisi-v 1.0.10


Benim durumumda bu hata, paketleyici v2'yi yükledikten sonra ortaya çıkıyor . İle çözerim gem uninstall -a bundler; gem install bundler -v '<2.0'.
SergA

0

Bunu yaptım çünkü içimde kötü bir şey vardı vendor/bundle. Apache ile hiçbir ilgisi yok, sadece yerel geliştirme ortamında.

Düzeltmek için, yeniden kullanılmaması vendor\bundleiçin referansımı sildim ve ayrıca sildim .bundle/config.

Ardından, yeniden paketledim (daha sonra GEM_HOMEyerine yükledim vendor/bundleve sorun ortadan kalktı.


0

NOT: Hosting şirketim Site5.com ve Yönetilen bir VPS'ye sahibim.

Public_html dizinimdeki .htaccess dosyasına hem GEM_HOME hem de GEM_PATH için env değişkenleri ekledim (raylar uygulamasındaki public dizinin takma adı)

Daha önce bunlara ihtiyaç yoktu, bu yüzden ev sahibi tarafında bir şeyler değişmiş olmalı. Yolcu sunucusunu yeniden başlatmak için restart.txt dosyasına dokunduktan sonra bu hatayı aldı.

GEM_PATH aldı:

echo $ GEM_PATH

GEM_HOME'u şu şekilde aldı:

mücevher 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 dosyası aşağıdaki satırlarla güncellendi:

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

Benim için sorun, RVM Ruby'yi Passenger ile ilişkilendirmekti. Bu yüzden, RVM ruby ​​sarmalayıcısını yolcu yapılandırma dosyasına entegre etmem gerekiyordu.

Rvm ruby ​​sarmalayıcı yolunu şu komutla buluyorum:

passenger-config --ruby-command

Sonuçtan yolu aldım ve bir yolcu yapılandırmasına girdim 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

Bu sorunu test rayları projesi oluşturarak ve tüm mücevherleri yükleyerek çözdüm, ardından mevcut Gemfile.lock'umu test ile değiştirdim ve her şey yolunda gidiyor.

Sanırım bu problem bundlerbarındırmalı sürümlerden geliyor, bu yüzden lütfen hosting paketleyicisinin projenizle aynı sürüm olduğundan emin olun.


0

Benim durumumda, izinler meselesiydi:

 sudo chmod -R +777 <your_folder_path>

-1: 777'yi asla dosyalara veya dizinlere koymayın. "Sahip", "grup" ve "diğerleri" arasında bir ayrım varsa, bunun nedeni bir güvenlik meselesidir.
Florian Doyen

0

Phusion yolcunun kullanıldığı Ruby versiyonunun versiyonu, raylar uygulamanıza göre farklılık gösterir.

<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'deki sürümün rails uygulamasıyla aynı olduğundan emin olun.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.