Ubuntu - Apache - Rails - Passenger - Ошибка создания

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

*** Passenger ERROR (ext/common/ApplicationPool/../SpawnManager.h:220):
Could not start the spawn server: /usr/local/rvm/gems/ruby-1.9.3-head/ruby: No such file or directory (2)
[ pid=8970 thr=139698295748416 file=ext/apache2/Hooks.cpp:865 time=2012-11-07 17:17:32.422 ]: Unexpected error in mod_passenger: Cannot spawn application '/www/lensfinder.se/ruby/lensfinder': 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)

Из того, что я могу прочитать, это то, что он не может получить доступ к /www/lensfinder.se/ruby/lensfinder, хотя он существует.

И я нашел этот FAQ на Phusion Passengers

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

passenger-config --root

Я получаю это:

-bash: /usr/bin/passenger-config: ruby: bad interpreter: No such file or directory

конфиг апача:

LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-head/gems/passenger-3.0.12/ext/apache2/mod_passenger.so
   PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-head/gems/passenger-3.0.12
   PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.3-head/ruby

<VirtualHost 10.0.0.37:80>
    ServerAdmin [email protected]
    DocumentRoot /www/lensfinder.se/htdocs
    ServerName lensfinder.se
Redirect 301 / http://www.lensfinder.se/
    ErrorLog /var/log/apache2/lensfinder.se-error.log
    CustomLog /var/log/apache2/lensfinder.se-access.log combined
</VirtualHost>
<VirtualHost 10.0.0.37:80>
    ServerAdmin [email protected]
    ServerName lensfinder.se
    ServerAlias www.lensfinder.se
    ServerAlias *.lensfinder.se
#   DocumentRoot /www/lensfinder.se/htdocs
    DocumentRoot /www/lensfinder.se/ruby/lensfinder/script
    <Directory />
        Options FollowSymLinks
        AllowOverride all
    </Directory>
    <Directory /www/lensfinder.se/htdocs>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
    ScriptAlias /cgi-bin/ /www/lensfinder.se/cgi-bin/
    <Directory "/www/lensfinder.se/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
        AllowOverride AuthConfig
#Options Includes
#Options FollowSymLinks
#Options +Indexes +Multiviews +FollowSymLinks
    </Directory>
    <Directory "/www/lensfinder.se/htdocs/usage">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
        AllowOverride AuthConfig
#Options Includes
#Options FollowSymLinks
#Options +Indexes +Multiviews +FollowSymLinks
    </Directory>
    ErrorLog /var/log/apache2/lensfinder.se-error.log
    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn
    CustomLog /var/log/apache2/lensfinder.se-access.log combined
    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>


Alias /ruby/ /www/lensfinder.se/ruby/lensfinder/script
        <Directory /www/lensfinder.se/ruby/lensfinder/script>
#       Options ExecCGI
#       AddHandler cgi-script .cgi
#       Addhandler fastcgi-script .fcgi .fcg .fpl
        AllowOVerride all
        Order allow,deny
        Allow from all
        </Directory>

<IfModule passenger_module>
   PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-head/gems/passenger-3.0.12
   PassengerRuby /usr/local/rvm/gems/ruby-1.9.3-head/ruby
</IfModule>

RailsEnv production
RailsBaseURI /script



#
<Location />
# Insert filter
SetOutputFilter DEFLATE

# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html

# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip

# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
# the above regex won't work. You can use the following
# workaround to get the desired effect:
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary

# Make sure proxies don't deliver the wrong content
#Header append Vary User-Agent env=!dont-vary
</Location>

</VirtualHost>

person Philip    schedule 07.11.2012    source источник
comment
Можем ли мы увидеть вашу конфигурацию Apache для этого виртуального хоста?   -  person Anthony Alberto    schedule 07.11.2012
comment
@AnthonyAlberto - Да, смотрите обновленный ответ!   -  person Philip    schedule 07.11.2012
comment
Ваша конфигурация на самом деле довольно запутанная... где ваша папка, содержащая приложение Rails?   -  person Anthony Alberto    schedule 07.11.2012
comment
@AnthonyAlberto - /www/lensfinder.se/ruby/lensfinder   -  person Philip    schedule 07.11.2012


Ответы (2)


Хорошо, я предполагаю, что вы указываете Passenger не на тот каталог. Вы должны указать его на каталог public вашего приложения Rails.

Вот минималистская конфигурация для вашего проекта, которая входит в /etc/apache2/sites-available/lensfinder.se:

<VirtualHost 10.0.0.37:80>
  ServerAdmin [email protected]
  ServerName lensfinder.se
  ServerAlias *.lensfinder.se

  DocumentRoot /www/lensfinder.se/ruby/lensfinder/public
  RailsEnv production

  <Directory "/www/lensfinder.se/ruby/lensfinder/public">
    Options FollowSymLinks
    AllowOverride All
    Options -MultiViews
  </Directory>

</VirtualHost>

Затем отредактируйте /etc/apache2/apache2.conf и в конце файла добавьте:

LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-head/gems/passenger-3.0.12/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-head/gems/passenger-3.0.12
PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.3-head/ruby

затем подключите вашу конфигурацию виртуального хоста, чтобы включить ее:

ln -s /etc/apache2/sites-available/lensfinder.se /etc/apache2/sites-enabled/lensfinder.se 

И конечно же перезапустить apache2

person Anthony Alberto    schedule 07.11.2012
comment
Конечно, но это должно быть в общем /etc/apache2/apache2.conf, тогда как конфигурация, которую я сделал выше, идет в /etc/apache2/sites-available, а затем вы создаете симлинк файла внутри sites-enabled, это стандартный способ сделать это - person Anthony Alberto; 07.11.2012
comment
Хорошо, но если у меня есть виртуальные хосты, которые не используют пассажира, не будет ли проблемой, если я добавлю это в общую конфигурацию? - person Philip; 07.11.2012
comment
вовсе нет, Passenger не справится с этим, если это не приложение Rails. Однако, если у вас есть другие приложения Rails и вы не хотите, чтобы пассажир обрабатывал их, а вместо этого используете unicorn или что-то еще, используйте RailsAutoDetect off, см. документ здесь: modrails.com/documentation/ - person Anthony Alberto; 07.11.2012
comment
А если у меня есть несколько сайтов с разными версиями ruby...? - person Philip; 07.11.2012
comment
И, начиная с Passenger 3.2, вы сможете переключать рубиновые версии для каждого виртуального хоста ... хотя он еще не вышел, все еще находится в состоянии preview, но, по-видимому, он был выпущен, чтобы вы могли его протестировать. - person Anthony Alberto; 07.11.2012

В дополнение к предыдущему ответу, в моем случае даже после редактирования файлов конфигурации у меня все еще были проблемы с загрузкой Apache, поскольку модуль был по-прежнему настроен на загрузку предыдущего (глобального) файла .so.

Я обнаружил, что в каталоге /usr/local/rvm/gems/[YOUR-RUBY-VER]/gems/passenger-[YOUR-PASSENGER-VER]/ext/apache2/ есть исходные файлы и сценарии, но нет двоичных файлов. Однако для их создания были предоставлены сценарии. Просто запустите sudo /usr/local/rvm/gems/ruby-[YOUR-RUBY-VER]/gems/passenger-[YOUR-PASSENGER-VER]/bin/passenger-install-apache2-module.

person pospi    schedule 30.10.2013