Настройка приложения Rails на Apache с пассажиром - похоже, Rails не загружается - PullRequest
11 голосов
/ 28 мая 2011

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

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

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

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

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

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

На данный момент мне неясно, выполняет ли пассажирский модуль что-либо или где искать какие-либо доказательства того, что происходит.Я пробовал разные вещи, такие как запуск приложения Rails с другого виртуального хоста под названием "blog" на http: /// blog, и маршрутизация работала (статические страницы и все), но без 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 webmaster@localhost

        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: /// blog, что не совсем то, что я хотел получить, но это не имеет значения, так как я использую это просто для изучения Rails в виртуальной среде.Мне нужно будет снова поработать над тем, чтобы оно снова стало приложением верхнего уровня.Вот мой текущий (окончательный) файл VirtualHost для справки:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        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>

Ответы [ 3 ]

21 голосов
/ 28 мая 2011

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

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

Читать всю документацию здесь

4 голосов
/ 28 мая 2011

Двойная проверка, чтобы убедиться, что пассажир загружает ваше приложение, набрав статус пассажира 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
0 голосов
/ 28 мая 2011

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

...