не може завантажити такий файл - bundler / setup (LoadError)


128

Я встановлюю додаток 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?

Всередині віртуального хоста в апахе2.conf я додав:

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

А зараз це працює.

Це правильний спосіб виправити це?

Відповіді:


49

Можливо, у вашій системі був встановлений попередній Ruby env до встановлення 2.0? Це, можливо, мав існуючий GEM_PATH, який веде до каталогу /1.8, який установка версії 2.0 просто зберігала.

Тоді проблема, з якою у вас виникли проблеми, полягала в тому, що пасажир / Apache шукав у каталозі /2.0, коли насправді дорогоцінні камені знаходились у каталозі /1.8. Таким чином, ваш явно кажучий апарат apche використовувати каталог /1.8 має сенс вирішити проблему.

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

Ви також можете спробувати за допомогою диспетчера версій Ruby для обробки декількох Ruby envs.

Деякі речі, які я знайшов у Google:


202

У мене була майже однакова помилка, і я зміг її повністю виправити, запустивши:

gem install bundler

Можливо, ваша установка постачальника пошкоджена або відсутня - ось що сталося в моєму випадку. Зауважте, що якщо вищезгадане не вдалося, ви можете спробувати:

sudo gem install bundler

... але, як правило, ви можете це зробити без судо.


2
Це був я! Питання - чи sudoнасправді не потрібно? Я звик, sudoале тепер мені цікаво, що було б, якби я цього не зробив.
Піт

2
Якщо ви використовуєте іншу версію Ruby, ніж системна система за замовчуванням, вам НЕ використовувати sudo! sudo gem ....встановить defaultверсію дорогоцінного каміння, і (в моєму випадку Ubuntu 14.04) sudoне може запустити rvm.
Farfromunique

1
У моїй системі macOS мені потрібен sudoбув рубін системи за замовчуванням, але не потрібен він для будь-якої версії ruby, яку я встановив із rvm.
Бен Віснес

1
Лише зауваження сказати, що це рішення для мене використовувало підсистему Windows для Linux, після недавнього оновлення Windows. Чомусь оновлення підірвало моє встановлення рубіну RVM.
Бен Фултон

1
Привіт, у мене така ж проблема, як питання щодо використання ubuntu з gem 2.7.6і ruby 2.5.0p0що робити?
TheCrazyProfessor

28

У вас, швидше за все, встановлено більше одного Ruby.

Якщо ви використовуєте RVM, вам, ймовірно, потрібно запустити:

rvm use system

щоб встановити версію рубіну для використання.

Побачити Http://rvm.io/rubies/default

ruby -v

підкаже версію, яку ви зараз використовуєте.


25

Ви можете спробувати запустити:

bundle exec rake rails:update:bin

Як @Dinesh згадується в Rails 5:

rails app:update:bin

10

У моєму випадку рядки, додані до файлу config 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встановлені рейки, але я все-таки отримав 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, просто в місцевих розробниках.

Для виправлення я видалив vendor\bundle, а також видалив посилання на нього в моєму.bundle/config щоб він не використовувався повторно.

Потім я знову вклав пакет (який потім встановив GEM_HOMEзамість, vendor/bundleі проблема пішла.


0

ПРИМІТКА. Моєю хостинговою компанією є Site5.com, і у мене є керований VPS.

Я додав змінні env як для GEM_HOME, так і для GEM_PATH до файлу .htaccess у моєму каталозі public_html (псевдонім до загальнодоступного каталогу в додатку rails)

Раніше вони не були потрібні, тому щось, мабуть, змінилося з боку господарів. Ця помилка отримала після торкання файла restart.txt для перезапуску пасажирського сервера.

Отримав GEM_PATH за:

echo $ GEM_PATH

Отримав GEM_HOME за:

gem 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 з пасажиром. Тому мені потрібно було інтегрувати рубінову оболонку RVM в файл конфігурації пасажира.

Я знаходжу rvm ruby ​​обгортковий шлях з командою:

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 у файли чи каталоги. Якщо існує розкол між "власником", "групою" та "іншими", це тому, що це питання безпеки.
Флоріан Дойен

0

Версія рубінової версії, в якій був використаний пасажир phusion, відрізняється від вашої програми рельсів.

<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 однакова з додатком рейли.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.