не могу загрузить такой файл - бандлер / настройка (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?

Внутри виртуального хоста в apache2.conf я добавил:

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

И теперь он работает.

Это правильный способ исправить это?

Mr_Nizzle
источник

Ответы:

49

Может быть, в вашей системе был установлен предыдущий Ruby env до установки 2.0? У него мог быть существующий GEM_PATH, ведущий в каталог /1.8, который просто сохранялся при установке версии 2.0.

Проблема, с которой вы, вероятно, столкнулись, заключалась в том, что Passenger / Apache просматривал каталог /2.0, тогда как на самом деле драгоценные камни находились в каталоге /1.8. Таким образом, ваш явный указание apache использовать каталог /1.8 имеет смысл для решения проблемы.

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

Вы также можете попробовать использовать Ruby Version Manager для обработки нескольких окружений Ruby.

Некоторые вещи, которые я нашел в Google:

robmclarty
источник
203

У меня была почти такая же ошибка, и я смог полностью исправить ее, просто запустив:

gem install bundler

Возможно, ваша установка связки повреждена или отсутствует - вот что случилось в моем случае. Обратите внимание, что если вышеуказанное не поможет, вы можете попробовать:

sudo gem install bundler

... но обычно вы можете сделать это без sudo.

Эндрю Фолкнер
источник
2
Это был я! Вопрос - sudoдействительно ли это необходимо? Я использовал, sudoно теперь мне интересно, что бы произошло, если бы я этого не сделал.
Пит,
2
Если вы используете версию Ruby, отличную от установленной по умолчанию, вам НЕ нужно использовать sudo! sudo gem ....установит defaultверсию sudoгема и (в моем случае Ubuntu 14.04) не сможет запустить rvm.
Farfromunique 01
1
В моей системе macOS мне нужен sudoбыл системный ruby ​​по умолчанию, но он не нужен ни для одной из версий ruby, которые я установил с помощью rvm.
Бен Виснесс,
1
Просто примечание, чтобы сказать, что это было решение для меня, использующего подсистему Windows для Linux, после недавнего обновления Windows. По какой-то причине обновление уничтожило мои установки RVM ruby.
Бен Фултон
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
zolter
источник
10

В моем случае строки, добавленные в файл конфигурации 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...
user2997993
источник
Так было и со мной. В моем случае PassengerDefaultRubyречь шла о старой установке Ruby.
Waseem
8

Я получил эту ошибку в новом приложении Rails с правильно установленным пакетом. Комментирование весеннего гема в Gemfile решило проблему.

Nachbar
источник
4
Это было для меня, но gem install springвместо того, чтобы комментировать.
jakenberg
3

Я столкнулся с той же проблемой, но я думаю, что это было связано с springкешированием некоторых драгоценных камней и конфигураций. Я исправил это, запустивgem pristine --all .

Это восстанавливает установленные драгоценные камни до первоначального состояния из файлов, находящихся в кеше драгоценных камней.

или вы можете просто попробовать свой драгоценный камень, как

gem pristine your_gem_name
НМ Пеннипакер
источник
1

Для меня это происходило в производственной среде.

rm /vendor/bundle

затем bundle install --deployment

решил вопрос.

vanboom
источник
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установил Rails, но у меня все еще есть cannot load such file -- bundler/setup (LoadError)

наконец работает gem install rails -v 4.2исправил это

Шериф Элькассаби
источник
1

Версия Bundler может быть причиной проблемы.

Пожалуйста, установите связку с другим номером версии.

Например,

gem install bundler -v 1.0.10

hobbydev
источник
В моем случае эта ошибка возникает после установки бандлера v2 . Я разрешаю это с помощью gem uninstall -a bundler; gem install bundler -v '<2.0'.
SergA
0

У меня такое было, потому что в моем было что-то плохое vendor/bundle. Ничего общего с Apache, только в локальной среде разработки.

Чтобы исправить, я удалил vendor\bundle, а также удалил ссылку на него в моем.bundle/config чтобы он не использовался повторно.

Затем я снова собрал (который затем установил GEM_HOMEвместо, vendor/bundleи проблема исчезла.

thewoolleyman
источник
0

ПРИМЕЧАНИЕ. Моя хостинговая компания - Site5.com, и у меня есть управляемый VPS.

Я добавил переменные env для GEM_HOME и GEM_PATH в файл .htaccess в моем каталоге public_html (псевдоним общедоступного каталога в приложении rails)

Раньше они не были нужны, так что, должно быть, что-то изменилось на стороне хозяев. Эта ошибка возникла после касания файла restart.txt для перезапуска пассажирского сервера.

Получил GEM_PATH от:

эхо $ GEM_PATH

Получил GEM_HOME от:

драгоценный камень 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 с Passenger. Поэтому мне нужно было интегрировать обертку RVM ruby ​​в файл конфигурации пассажира.

Я узнаю путь к оболочке 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связана с версиями с хостингом, поэтому убедитесь, что пакет хостинга совпадает с версией вашего проекта.

hsul4n
источник
0

В моей ситуации речь шла о разрешениях:

 sudo chmod -R +777 <your_folder_path>
петров
источник
-1: никогда не помещайте 777 в файлы или каталоги. Если есть разделение между «владельцем», «группой» и «другими», это потому, что это вопрос безопасности.
Флориан Дуайен
0

Версия ruby, в которой использовался пассажир phusion, отличается от вашего приложения rails.

<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 совпадает с версией приложения rails.

giapnh
источник
0

Потратив много времени, я пытаюсь следовать этим ответам после того, как приведенный ниже код сработал для меня. Перед тем как это сделать, просто убедитесь, что с обновлением проблем нет :)

gem update --system

Fábio BC Souza
источник