Последние пару дней я безуспешно пытался запустить Phusion Passenger на 5.6 на 5.6. Первоначально я начал с Ruby 1.9.2 под RVM, поскольку стандартный Ruby для дистрибутивов на основе RHEL довольно старый. Я установил все нормально, но столкнулся с некоторыми проблемами. Думая, что это RVM, я полностью удалил его вместе с Ruby по умолчанию и установил Ruby Enterprise Ed. 1.8.7.2011-03 в /usr
. У меня все еще те же проблемы.
Когда я пытаюсь использовать Passenger с инструкциями по установке по умолчанию, предоставленными установщиком, я получаю сообщение об ошибке cannot find phusion_passenger/analytics_logger
. Я нашел очень мало информации об этом от Google, но насколько я могу предположить, это ошибка разрешений.
Сначала я попытался установить ACL, разрешающий пользователю доступ для пользователя apache к корневому каталогу пассажира. В противном случае я попытался изменить корневой каталог пассажира на 777 с помощью chmod. Затем я попытался изменить контекст корневого каталога пассажира и его родительского каталога на httpd_sys_content_t
согласно разделу 6.3.5 руководства пользователя. Наконец, я попытался установить SELinux в разрешающий режим. Ничего не получилось.
Прочитав руководство пользователя, я попробовал следующие настройки, в результате которых получилось 500 ISE:
PassengerUserSwitching off
PassengerUser apache
PassengerGroup apache
Вот мой passenger.conf
файл без указанного выше (из /etc/httpd/conf.d
):
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-3.0.7
PassengerRuby /usr/bin/ruby
....
PassengerLogLevel 3
Это результат журнала ошибки 500:
[ pid=17939 thr=1094539584 file=ext/common/ApplicationPool/Pool.h:939 time=2011-04-30 13:12:17.351 ]: Spawning a process for /var/www/html because there are none for this app group
[ pid=17939 thr=1094539584 file=ext/common/ApplicationPool/../SpawnManager.h:291 time=2011-04-30 13:12:17.352 ]: Spawning a new application process for /var/www/html...
[ pid=17939 thr=1094539584 file=ext/common/ApplicationPool/../SpawnManager.h:427 time=2011-04-30 13:12:17.352 ]: Spawn server died. Attempting to restart it...
[ pid=17939 thr=1094539584 file=ext/common/ApplicationPool/../SpawnManager.h:430 time=2011-04-30 13:12:17.357 ]: Restart seems to be successful.
[ pid=17939 thr=1094539584 file=ext/common/ApplicationPool/../SpawnManager.h:291 time=2011-04-30 13:12:17.359 ]: Spawning a new application process for /var/www/html...
/usr/bin/ruby: error while loading shared libraries: libtcmalloc_minimal.so.0: cannot open shared object file: No such file or directory
[ pid=17939 thr=1094539584 file=ext/common/ApplicationPool/Server.h:297 time=2011-04-30 13:12:17.365 ]: Client 9: SpawnException occured (no error page)
[ pid=17951 thr=47853881642864 file=ext/apache2/Hooks.cpp:865 time=2011-04-30 13:12:17.366 ]: Unexpected error in mod_passenger: Cannot spawn application '/var/www/html': Could not read from the spawn server: Connection reset by peer (104)
Backtrace:
in 'virtual Passenger::SessionPtr Passenger::ApplicationPool::Client::get(const Passenger::PoolOptions&)' (Client.h:750)
in 'Passenger::SessionPtr Hooks::getSession(const Passenger::PoolOptions&)' (Hooks.cpp:297)
in 'int Hooks::handleRequest(request_rec*)' (Hooks.cpp:566)
Во-первых, когда вы говорите, что удалили Ruby по умолчанию, я надеюсь, вы имеете в виду не тот, который поставляется с CentOS. По моему опыту, лучше просто оставить это в покое и позволить yum справиться с этим. Я устанавливаю свои версии Ruby / REE в / opt / ruby, но они могут идти в / usr / local или где угодно.
Что касается настройки SELinux, я лично отключил его, но разрешающий не должен отличаться от этого. Из базовой установки я просто добавляю типичные пакеты, необходимые для компиляции пакетов, и выполняю полное обновление:
# yum -y install gcc make gcc-c++ cpp automake patch zlib-devel && yum -y upgrade
Затем устанавливаю REE 1.8.7-2011.03:
# ./installer --dont-install-useful-gems --no-dev-docs --auto /opt/ruby/enterprise-1.8.7-2011.03
Убедитесь, что Apache (httpd) установлен, а затем установите гем для пассажиров и соответствующий модуль Apache:
# /opt/ruby/enterprise-1.8.7-2011.03/bin/gem install --no-rdoc --no-ri --version '= 3.0.7' passenger
# /opt/ruby/enterprise-1.8.7-2011.03/bin/passenger-install-apache2-module -a
Добавьте то, что он вам сообщает, в httpd.conf Apache. Я использую следующее:
SetEnv MY_RUBY_HOME "/opt/ruby/enterprise-1.8.7-2011.03"
SetEnv GEM_HOME "/opt/ruby/enterprise-1.8.7-2011.03/lib/ruby/gems/1.8"
SetEnv GEM_PATH "/opt/ruby/enterprise-1.8.7-2011.03/lib/ruby/gems/1.8"
LoadModule passenger_module /opt/ruby/enterprise-1.8.7-2011.03/lib/ruby/gems/1.8/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
PassengerRoot /opt/ruby/enterprise-1.8.7-2011.03/lib/ruby/gems/1.8/gems/passenger-3.0.7
PassengerRuby /opt/ruby/enterprise-1.8.7-2011.03/bin/ruby
Затем я развертываю простое приложение Rails в / home / httpd / app и добавляю VirtualHost, как показано ниже:
<VirtualHost *:80>
ServerName example.domain.com
DocumentRoot /home/httpd/app/public
RackBaseURI /
RailsEnv production
PassengerSpawnMethod smart
</VirtualHost>
Убедитесь, что установлены все драгоценные камни, которые потребуются вашему приложению, включая «рельсы».
На протяжении всей установки вы не должен иметь что-то особенное с правами доступа к файлам, кроме того, что вы должны иметь в виду, что ваше приложение будет работать от имени пользователя / группы владельца корня приложения Rails. У этого пользователя должны быть как минимум разрешения r-x на все файлы / opt / ruby.
Я честно не знаю, почему вы получаете /usr/bin/ruby: error while loading shared libraries: libtcmalloc_minimal.so.0: cannot open shared object file: No such file or directory
ошибка, но если вы будете следовать приведенным выше инструкциям и убедитесь, что не беспокоитесь о своей системе Ruby, у вас не должно возникнуть никаких проблем.
Мне жаль, что я не ответил на ваш вопрос, но я надеюсь, что мой проверенный и проверенный процесс будет одинаково хорошо работать для вас, как и для меня!