Ошибка Passenger RVM: не удается загрузить такой сборщик/установщик файлов

У меня есть сервер Debian, и когда я пытаюсь запустить Passenger и перейти в корневой каталог моего приложения:

Ошибка:

cannot load such file -- bundler/setup

Окружающая обстановка

deployment@currienet:/$ which ruby
/home/deployment/.rvm/rubies/ruby-1.9.3-p194/bin/ruby
deployment@currienet:/$ ruby --version
ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]
deployment@currienet:/$ which rails
/home/deployment/.rvm/gems/ruby-1.9.3-p194/bin/rails
deployment@currienet:/$ rails --version
Rails 3.2.8
deployment@currienet:/$ which bundle
/home/deployment/.rvm/gems/ruby-1.9.3-p194/bin/bundle
deployment@currienet:/$ gem list bundle
bundler (1.2.1)
deployment@currienet:/$ gem list passenger
passenger (3.0.17)
deployment@currienet:/$ which rvm
/home/deployment/.rvm/bin/rvm
deployment@currienet:/$ rvm --version
rvm 1.16.6 (master) by Wayne E. Seguin <[email protected]>, Michal Papis <[email protected]> [https://rvm.io/]

Файл пассажира Apache.load

LoadModule passenger_module /home/deployment/.rvm/gems/ruby-1.9.3-p194/gems/passenger-3.0.17/ext/apache2/mod_passenger.so
PassengerRoot /home/deployment/.rvm/gems/ruby-1.9.3-p194/gems/passenger-3.0.17
PassengerRuby /usr/local/bin/ruby

httpd.conf Apache

<VirtualHost *:80>
      ServerName http://currienet
      # !!! Be sure to point DocumentRoot to 'public'!
      DocumentRoot /var/www/currienet/marketplace/current/public
      <Directory /var/www/currienet/marketplace/current/public >
         # This relaxes Apache security settings.
         Allow from all
        Options -MultiViews
      </Directory>
</VirtualHost>

Пучок

deployment@currienet:/var/www/currienet/marketplace/current$ bundle show
Gems included by the bundle:
  * actionmailer (3.2.8)
  * actionpack (3.2.8)
  * activemodel (3.2.8)
  * activerecord (3.2.8)
  * activeresource (3.2.8)
  * activesupport (3.2.8)
  * arel (3.0.2)
  * bcrypt-ruby (3.0.1)
  * builder (3.0.0)
  * bundler (1.2.1)
  * cocaine (0.2.1)
  * coffee-rails (3.2.2)
  * coffee-script (2.2.0)
  * coffee-script-source (1.3.3)
  * daemon_controller (1.0.0)
  * devise (2.1.2)
  * erubis (2.7.0)
  * execjs (1.4.0)
  * fastthread (1.0.7)
  * haml (3.1.7)
  * haml-rails (0.3.4)
  * hike (1.2.1)
  * i18n (0.6.1)
  * journey (1.0.4)
  * jquery-rails (2.1.1)
  * json (1.7.5)
  * mail (2.4.4)
  * mime-types (1.19)
  * multi_json (1.3.6)
  * orm_adapter (0.4.0)
  * paperclip (3.1.2)
  * passenger (3.0.17)
  * pg (0.14.0)
  * polyglot (0.3.3)
  * rack (1.4.1)
  * rack-cache (1.2)
  * rack-ssl (1.3.2)
  * rack-test (0.6.1)
  * rails (3.2.8)
  * railties (3.2.8)
  * rake (0.9.2.2)
  * rdoc (3.12)
  * sass (3.2.1)
  * sass-rails (3.2.5)
  * sprockets (2.1.3)
  * thor (0.16.0)
  * tilt (1.3.3)
  * treetop (1.4.10)
  * tzinfo (0.3.33)
  * uglifier (1.2.7)
  * warden (1.2.1)
  * will_paginate (3.0.3)

Счета

У меня есть две учетные записи на сервере: корневая и развертывание.

Мое приложение и rvm установлены в процессе развертывания, но Apache установлен под root (чтобы иметь возможность привязываться к порту 80). Судя по списку процессов при запуске ps -fe, пассажир вызывается apache и запускается под root:

root     16159 16155  0 02:08 ?        00:00:00 PassengerWatchdog
root     16165 16159  0 02:08 ?        00:00:00 PassengerHelperAgent
root     16167 16165  0 02:08 ?        00:00:00 Passenger spawn server
nobody   16172 16159  0 02:08 ?        00:00:00 PassengerLoggingAgent
www-data 16179 16155  0 02:08 ?        00:00:00 /usr/sbin/apache2 -k start
www-data 16180 16155  0 02:08 ?        00:00:00 /usr/sbin/apache2 -k start
www-data 16181 16155  0 02:08 ?        00:00:00 /usr/sbin/apache2 -k start
www-data 16182 16155  0 02:08 ?        00:00:00 /usr/sbin/apache2 -k start
www-data 16183 16155  0 02:08 ?        00:00:00 /usr/sbin/apache2 -k start

Корневая учетная запись не имеет доступа к рельсам или пакету в корневом пути.

.rvmrc и config/setup_load_paths.rb

Я пытался следовать инструкциям на Пути блогу Better RVM & Passenger Integration и Использование рубинов RVM с Passenger:

Создайте файл .rvmrc в корневом каталоге моего приложения с помощью команды:

rvm use 1.9.3 --rvmrc --create

Что генерирует файл .rvmrc:

if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
  && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
then
  \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
  [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]] &&
    \. "${rvm_path:-$HOME/.rvm}/hooks/after_use" || true
  if [[ $- == *i* ]] # check for interactive shells
  then echo "Using: $(tput setaf 2)$GEM_HOME$(tput sgr0)" # show the user the ruby and gemset they are using in green
  else echo "Using: $GEM_HOME" # don't use colors in non-interactive shells
  fi
else
  # If the environment file has not yet been created, use the RVM CLI to select.
  rvm --create use  "$environment_id" || {
    echo "Failed to create RVM environment '${environment_id}'."
    return 1
  }
fi

# If you use bundler, this might be useful to you:
 if [[ -s Gemfile ]] && {
   ! builtin command -v bundle >/dev/null ||
   builtin command -v bundle | GREP_OPTIONS= \grep $rvm_path/bin/bundle >/dev/null
 }
 then
   printf "%b" "The rubygem 'bundler' is not installed. Installing it now.\n"
   gem install bundler
 fi
 if [[ -s Gemfile ]] && builtin command -v bundle >/dev/null
 then
   bundle install | GREP_OPTIONS= \grep -vE '^Using|Your bundle is complete'
 fi

И добавьте следующее в config/setup_load_paths.rb

if ENV['MY_RUBY_HOME'] && ENV['MY_RUBY_HOME'].include?('rvm')
  begin
    rvm_path     = File.dirname(File.dirname(ENV['MY_RUBY_HOME']))
    rvm_lib_path = File.join(rvm_path, 'lib')
    $LOAD_PATH.unshift rvm_lib_path
    require 'rvm'
    RVM.use_from_path! File.dirname(File.dirname(__FILE__))
  rescue LoadError
    # RVM is unavailable at this point.
    raise "RVM ruby lib is currently unavailable."
  end
end

# Select the correct item for which you use below.
# If you're not using bundler, remove it completely.

# If we're using a Bundler 1.0 beta
ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile', File.dirname(__FILE__))
require 'bundler/setup'

И запустил apache, запустив

sudo /etc/init.d/apache2 restart

Я все еще получаю ту же ошибку.

Бесполезный

Я обнаружил, что следующие связанные вопросы бесполезны (но могут быть полезны другим):

RVM и Passenger: нет такого файла для загрузки - сборщик - разрешение было остатком конфигурации от старого виртуального хоста в файлах конфигурации Apache.


person Dr.Seuss    schedule 30.09.2012    source источник


Ответы (1)


У вас есть

deployment@currienet:/$ which ruby
/home/deployment/.rvm/rubies/ruby-1.9.3-p194/bin/ruby

и

PassengerRuby /usr/local/bin/ruby

это не то, что вы хотите. rvm имеет возможность настроить интерпретатор для использования пассажиром в качестве интерпретатора по умолчанию. https://rvm.io/integration/passenger/

Кроме того (увидев ваше последнее редактирование), возможно, вам нужно установить rvm для всей системы, так как пассажир будет работать от имени пользователя root.

person rewritten    schedule 30.09.2012
comment
Спасибо! Вот оно. Не знаю, как это ускользнуло от моего внимания. - person Dr.Seuss; 30.09.2012