nie można załadować takiego pliku - bundler / setup (LoadError)

128

Ustawiam aplikację Rails 4 z Ruby 2.0, ale otrzymuję komunikat „Nie można uruchomić aplikacji internetowej” i otrzymuję ten ślad:

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

Mój plik apache2.conf to:

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

Bundler version 1.3.5

ruby -v jest:

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

gem env jest:

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

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

Nie powinno GEM_PATHbyć /usr/lib/ruby/gems/2.0?

Wewnątrz wirtualnego hosta w apache2.conf dodałem:

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

A teraz to działa.

Czy to właściwy sposób, aby to naprawić?

Mr_Nizzle
źródło

Odpowiedzi:

49

Możliwe, że przed zainstalowaniem wersji 2.0 w systemie była zainstalowana poprzednia wersja środowiska Ruby? Mogło to mieć istniejącą GEM_PATH, która prowadzi do katalogu /1.8, który po prostu zachował instalację wersji 2.0.

Problem, który prawdopodobnie miałeś, polegał na tym, że Passenger / Apache szukał w katalogu /2.0, podczas gdy w rzeczywistości klejnoty znajdowały się w katalogu /1.8. Wyraźne polecenie Apache, aby używał katalogu /1.8, ma zatem sens, aby rozwiązać problem.

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

Możesz także spróbować użyć Menedżera wersji Ruby do obsługi wielu środowisk Ruby.

Kilka rzeczy, które znalazłem w Google:

robmclarty
źródło
202

Miałem prawie dokładnie ten sam błąd i mogłem go całkowicie naprawić, uruchamiając:

gem install bundler

Możliwe, że twoja instalacja pakietu jest uszkodzona lub jej brakuje - tak właśnie stało się w moim przypadku. Pamiętaj, że jeśli powyższe zawodzi, możesz spróbować:

sudo gem install bundler

... ale generalnie można to zrobić bez sudo.

Andrew Faulkner
źródło
2
To byłam ja! Pytanie - czy sudorzeczywiście jest to konieczne? Kiedyś, sudoale teraz zastanawiam się, co by się stało, gdybym tego nie zrobił.
Pete
2
Jeśli używasz innej wersji Rubiego niż domyślna systemowa, NIE musisz jej używać sudo! sudo gem ....zainstaluje defaultwersję gem i (w moim przypadku Ubuntu 14.04) sudonie może uruchomić rvm.
Farfromunique
1
W moim systemie macOS potrzebowałem sudodomyślnego systemu Ruby, ale nie potrzebowałem go dla żadnej wersji Ruby, którą zainstalowałem z rvm.
Ben Visness
1
Tylko uwaga, aby powiedzieć, że było to rozwiązanie dla mnie przy użyciu podsystemu Windows dla systemu Linux, po ostatniej aktualizacji systemu Windows. Z jakiegoś powodu aktualizacja zniszczyła moje instalacje RVM Ruby.
Ben Fulton
1
Cześć, mam ten sam problem co pytanie z użyciem ubuntu gem 2.7.6i ruby 2.5.0p0co robić?
TheCrazyProfessor
28

Najprawdopodobniej masz zainstalowanych więcej niż jeden Ruby.

Jeśli używasz RVM, prawdopodobnie musisz uruchomić:

rvm use system

aby ustawić wersję ruby ​​do użycia.

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

ruby -v

powie Ci wersję, której aktualnie używasz.

Michael Guild
źródło
25

Możesz spróbować uruchomić:

bundle exec rake rails:update:bin

Jak @Dinesh wspomniano w Railsach 5:

rails app:update:bin
zolter
źródło
10

W moim przypadku wiersze dołączone do pliku konfiguracyjnego apache po zainstalowaniu pasażera wyglądały następująco:

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

Ale aplikacja wymaga Ruby 2.0.0, więc zajęło mi to trochę czasu, ale w końcu błąd został rozwiązany po określeniu innej ścieżki za pomocą poniższego `` PassengerRuby '' w pliku konfiguracyjnym wirtualnego hosta Apache dla aplikacji:

...
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...
user2997993
źródło
Tak było w przypadku mnie. W moim przypadku PassengerDefaultRubychodziło o starą instalację rubinu.
Waseem
8

Otrzymałem ten błąd w nowej aplikacji Railsów z poprawnie zainstalowanym pakietem. Skomentowanie wiosennego klejnotu w Gemfile rozwiązało problem.

nachbar
źródło
4
To było to dla mnie, ale gem install springzamiast komentować.
jakenberg
3

Napotkałem ten sam problem, ale myślę, że był to spowodowane springbuforowaniem niektórych klejnotów i konfiguracji. Naprawiłem to, biegając gem pristine --all.

Przywraca to zainstalowane klejnoty do nieskazitelnego stanu z plików znajdujących się w pamięci podręcznej klejnotów.

lub możesz po prostu spróbować swojego klejnotu

gem pristine your_gem_name
NM Pennypacker
źródło
1

To działo się dla mnie w środowisku produkcyjnym.

rm /vendor/bundle

następnie bundle install --deployment

rozwiązał problem.

vanboom
źródło
1

Inna możliwa sytuacja: masz wielu użytkowników zdefiniowanych w środowisku serwera. W takim razie bieganie

passenger-config --ruby-command

poda niezbędne polecenie, aby określić nginx/sites-enabled/relevant_applicationplik w przypadku użycia, na przykład:

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
źródło
1

miałem ten sam problem i bez powodzenia wypróbowałem wszystkie odpowiedzi.

kroki, które zrobiłem, aby odtworzyć:

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

jednak bundle installzainstalowałem Railsy, ​​ale nadal mam cannot load such file -- bundler/setup (LoadError)

w końcu działa gem install rails -v 4.2naprawił to

Szeryf Elkassaby
źródło
1

Wersja pakietu Bundler może powodować problem.

Zainstaluj pakiet z innym numerem wersji.

Na przykład,

gem install bundler -v 1.0.10

hobbydev
źródło
W moim przypadku ten błąd występuje po zainstalowaniu bundlera v2 . Rozwiązuję to za pomocą gem uninstall -a bundler; gem install bundler -v '<2.0'.
SergA
0

Miałem to, ponieważ coś złego było w moim vendor/bundle. Nie ma to nic wspólnego z Apache, tylko w lokalnym środowisku deweloperskim.

Aby to naprawić, usunąłem vendor\bundle, a także usunąłem odniesienie do niego w moim, .bundle/configaby nie został ponownie użyty.

Następnie ponownie spakowałem (który następnie zainstalowałem GEM_HOMEzamiast, vendor/bundlea problem zniknął.

wełnarz
źródło
0

UWAGA: Moja firma hostingowa to Site5.com i mam zarządzany VPS.

Dodałem zmienne env zarówno dla GEM_HOME, jak i GEM_PATH do pliku .htaccess w moim katalogu public_html (alias do katalogu publicznego w aplikacji railsowej)

Wcześniej nie były potrzebne, więc coś musiało się zmienić po stronie gospodarzy. Wystąpił ten błąd po dotknięciu pliku restart.txt w celu ponownego uruchomienia serwera pasażera.

Otrzymano GEM_PATH przez:

echo $ GEM_PATH

Dostałem GEM_HOME od:

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

Zaktualizowany plik .htaccess z następującymi wierszami:

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
źródło
0

Dla mnie problemem było skojarzenie RVM Ruby z Passenger. Musiałem więc zintegrować opakowanie RVM Ruby z plikiem konfiguracyjnym pasażera.

Znajduję ścieżkę opakowania rvm ruby ​​za pomocą polecenia:

passenger-config --ruby-command

Wziąłem ścieżkę od wyniku i wszedłem do konfiguracji pasażera w 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
źródło
0

Naprawiłem ten problem, tworząc projekt testowych szyn i instalując wszystkie klejnoty, a następnie zastąpiłem mój obecny plik Gemfile.lock testem i wszystko działa dobrze.

Myślę, że ten problem dotyczy bundlerwersji z hostingiem, więc upewnij się, że pakiet hostingowy jest w tej samej wersji co Twój projekt.

hsul4n
źródło
0

W mojej sytuacji chodziło o uprawnienia:

 sudo chmod -R +777 <your_folder_path>
petrov
źródło
-1: Nigdy nie umieszczaj 777 na plikach lub katalogach. Jeśli istnieje podział między „właścicielem”, „grupą” i „innymi”, to dlatego, że jest to kwestia bezpieczeństwa.
Florian Doyen
0

Wersja wersji ruby, której użyto phusion pasażera, różni się w zależności od aplikacji railsowej.

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

Upewnij się, że wersja w konfiguracji httpd jest taka sama jak w aplikacji rails.

giapnh
źródło