2013-09-27 3 views
90

Я устанавливаю Rails 4 приложения с Ruby, 2.0, но я получаю «Веб-приложение не может быть запущено» и получить этот след:не может загрузить такой файл - Bundler/настройка (LoadError)

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 

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

Правильно ли это исправить?

ответ

42

Возможно, был установлен предыдущий 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 для обработки нескольких envs Ruby.

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

23

Вы, скорее всего, имеют более чем один рубин установлен.

Если вы используете RVM, вы, вероятно, нужно запустить:

rvm use system 

установить версию рубин использовать.

См http://rvm.io/rubies/default

ruby -v 

покажет вам версию, которую вы используете.

9

В моем случае, строки, присоединенные к файлу конфигурации 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 

Но приложение требует Руби 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... 
+0

Это был случай со мной, как Что ж. В моем случае 'PassengerDefaultRuby' ссылался на старую установку ruby. – Waseem

7

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

+3

Это было для меня, но «gem install spring» вместо комментариев. – jakenberg

119

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

gem install bundler 

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

sudo gem install bundler 

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

+2

Это я! Вопрос - является ли 'sudo' действительно необходимым? Я использовал 'sudo', но теперь мне интересно, что бы произошло, если бы я этого не сделал. – Pete

+0

В моем случае, да, но я думаю, что это зависит от вашей операционной системы. Сначала я сделал это на Linux Mint 17, но в OSX ящик sudo, возможно, не был необходим. Кроме того, я уже установил все свое другое программное обеспечение, связанное с Ruby, используя sudo. (Плохая практика, но это не для приложений, ориентированных на производство, в любом случае). –

+2

Если вы используете другую версию Ruby, чем системную, вам не нужно использовать 'sudo'! 'sudo gem ....' установит 'default' версию gem, и (в моем случае Ubuntu 14.04)' sudo' не сможет запустить rvm. – Farfromunique

0

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

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

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

14

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

bundle exec rake rails:update:bin 

Как @Dinesh упоминалось в Rails 5:

rails app:update:bin 
0

Примечание: Мой хостинг компания Site5.com и у меня есть Managed VPS

.

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

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

Got GEM_PATH по:

эхо $ GEM_PATH

Получил GEM_HOME по:

камень окр

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

я узнаю РВМ рубиновый путь обертку с командой:

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; 
Смежные вопросы