Настройка Rails-приложения на Apache с пассажиром - Rails не загружается

Я пытаюсь настроить Rails на экземпляр Ubuntu, следуя вместе с документацией, такой как https://help.ubuntu.com/community/RubyOnRails. Я пытаюсь настроить приложение на странице Rails Getting Started здесь: http://guides.rubyonrails.org/getting_started.html.

Что я сделал до сих пор:

  • Установка Ruby/RubyGems/Rails через RVM и GEM (этот установлен Ruby 1.9.2 и Rails 3.0.7)
  • Установка модуля mysql и mysql2 (последний не работал)
  • Создание приложения rails (приложение для блога в качестве учебного пособия)
  • Сим-связь/home/me/www/blog/public/from/var/www/blog/
  • Создание БД через грабли
  • Установка пассажирского модуля для выполнения Rails в Apache
  • Запуск passenger-install-apache2-module для настройки Apache
  • Удаление файла public.html из общедоступной /rails папки приложения, чтобы мой контроллер/просмотр мог запустить
  • Конфигурация доступных для сайтов файлов для виртуальных хостов
  • Конфигурация маршрутизации Rails

Я считаю, что это два последних шага, которые меня отключают, отчасти из-за незнания Apache и Rails (я новичок в обоих).

В моем файле виртуального хоста я пытаюсь указать на публичный общедоступный блог в /var/www/blog. Для моего маршрута Rails у меня есть root :to => "home#index" в соответствии с инструкциями.

Когда я просматриваю URL-адрес http://, я обычно должен видеть мои "Hello, Rails!". в разделе 4.3 Руководства по началу работы, но все, что я вижу, это список каталогов из Apache. Статические страницы работают, но не обрабатываются Rails.

В этот момент я не понимаю, работает ли пассажирский модуль и что-то делать, или где искать какие-либо доказательства того, что происходит. Я пробовал разные вещи, такие как запуск приложения Rails с другого виртуального хоста под названием "блог" в блоге http:///и работающей маршрутизации (статические страницы и все), но без Rails, как указано выше.

Обновление: после игры еще несколько, я получаю новое сообщение об ошибке (404):

Не найдено

Запрошенный URL/dispatch.cgi был не найден на этом сервере.

С тех пор я определил, что этот cgi 404 был вызван правилом перезаписи, которое я добавил в .htaccess из руководства на странице help.ubuntu.com, о которой я говорил выше. Похоже, что это не было необходимо или применялось к более ранней версии Rails. Несоответствия в инструкциях при поиске помощи в Интернете дезориентируют! Удаление файла оставляет меня с предыдущей проблемой.

Здесь запись в журнале Apache, которая, как мне кажется, коррелирует с первой ошибкой. Хотя я больше не получаю эту ошибку, кажется, может быть связано с чем-то еще, что я пытался раньше...

[Fri May 27 22:49:41 2011] [notice] Apache/2.2.16 (Ubuntu) PHP/5.3.3-1ubuntu9 with Suhosin-Patch Phusion_Passenger/3.0.7 configured -- resuming normal operations
[Fri May 27 22:51:18 2011] [error] [client 192.168.1.141] File does not exist: /var/www/blog/rails, referer: http://192.168.1.138/blog/

Здесь самая последняя запись с 404 на cgi вещь:

[Sat May 28 08:01:18 2011] [error] [client 192.168.1.141] File does not exist: /var/www/blog/dispatch.cgi

Что я могу пропустить? Спасибо!


Дополнительная информация по запросу. Файл сайтов Apache:

<VirtualHost *:80>
        ServerAdmin [email protected]

        DocumentRoot /var/www/blog/
    RailsEnv development

        # <Directory />
        #       Options FollowSymLinks
        #       AllowOverride None
        # </Directory>

        <Directory "/var/www/blog/">
        Options Indexes FollowSymLinks -MultiViews +ExecCGI
                AllowOverride All
                Order allow,deny
                allow from all
        # AddHandler cgi-script .cgi
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/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>

</VirtualHost>

Другое обновление:. Я смог заставить его работать, наконец, используя DocumentRoot верхнего уровня (/var/www) и основывая приложение Rails, использующее RailsBaseURI. Это отображает раздел "Развертывание в подпункт URI" инструкций Phusion Passenger. Он используется как блог http:///, который на самом деле не тот, который я хотел получить, но это не имеет никакого значения, поскольку я использую это только для того, чтобы узнать Rails в виртуальном. Мне нужно будет поработать над тем, чтобы он снова работал как приложение верхнего уровня. Вот мой текущий (окончательный) файл VirtualHost для справки:

<VirtualHost *:80>
        ServerAdmin [email protected]

        DocumentRoot /var/www/
        RailsEnv development

        <Directory /var/www/>
          Options FollowSymLinks
          AllowOverride None
        </Directory>

    RailsBaseURI /blog
        <Directory /var/www/blog/>
                Options Indexes FollowSymLinks -MultiViews +ExecCGI
                AllowOverride All
                Order allow,deny
                allow from all
                # AddHandler cgi-script .cgi
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/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>

</VirtualHost>

Ответ 1

Развертывание приложения Ruby on Rails

Предположим, что у вас есть Ruby on Rails приложение в /webapps/mycook и вы владеете доменом www.mycook.com. Вы может либо развернуть ваше приложение, либо корень виртуальных хостов (т.е. приложение будет доступно из корневой URL, http://www.mycook.com/), или в URI UU (то есть приложение будут доступны из дополнительного URL-адреса, такие как http://www.mycook.com/railsapplication).

Развертывание к корню виртуальных хостов

Добавить запись виртуального хоста на ваш Файл конфигурации Apache. Убедиться что выполняются следующие условия:

  • Корневой файл виртуальных хостов должен укажите свой Ruby on Rails приложений.
  • Разрешения Apache для каждого каталога должен разрешить доступ к этой папке.
  • MultiViews должны быть отключены для этого папка.

Например:

<VirtualHost *:80>
    ServerName www.mycook.com
    DocumentRoot /webapps/mycook/public
    <Directory /webapps/mycook/public>
        Allow from all
        Options -MultiViews
    </Directory>
</VirtualHost>

Вам также может потребоваться настроить файлы/папки. Убедиться что следующие папки читаемый и исполняемый Apache:

  • эта общая папка.
  • папка конфигурации приложений.
  • все родительские папки. То есть, /webapps/mycook и/webapps также должны быть читаемым и исполняемым Apache.

Затем перезапустите Apache. Приложение теперь развернута.

Прочитайте все документы здесь

Ответ 2

Двойная проверка, чтобы убедиться, что пассажир загружает ваше приложение, набрав   статус пассажира sudo

Это покажет вам ошибку, если пассажир не загружен или ниже, если это так. Обратите внимание на то, где оно показывает вам, какое приложение или приложения оно загрузило и каково текущее время безотказной работы:

----------- General information -----------
max      = 6
count    = 1
active   = 0
inactive = 1
Waiting on global queue: 0
----------- Application groups -----------
/home/rourkem/public_html/evecord.com/current:
  App root: /home/rourkem/public_html/evecord.com/current
  * PID: 18976   Sessions: 0    Processed: 5       Uptime: 23m 55s

Ответ 3

Обязательно удалите файл index.html из каталога public вашего приложения.