Настройка приложения Ruby On Rails в подкаталоге Apache

У меня есть apache2.2 на окнах. Я пытаюсь обслуживать как subversion (/svn), так и redmine (/redmine). У меня svn работает нормально с этой конфигурацией:

<Location /svn>
  DAV svn
  SVNParentPath C:/svn_repository
  ...
</Location>

Это прекрасно работает — мои пользователи svn могут просто нажать http://mybox/svn.

Теперь я хочу добавить еще один каталог для приложения rails (RedMine):

Я последовал совету в этом вопрос, чтобы настроить сервер mongrel и подключить к нему прокси-клиенты Apache. Он отлично работает, если я делаю его корневым, но у меня возникают проблемы с его созданием в подкаталоге:

<Location /redmine>
  ProxyPass http://localhost:3000/
  ProxyPassReverse http://localhost:3000/
</Location>

Какие-либо предложения?


person Michael Haren    schedule 22.01.2009    source источник


Ответы (4)


Вот что мне пришлось изменить:

Я удалил косую черту в конце:

<Location /redmine>
  ProxyPass http://localhost:3000
  ProxyPassReverse http://localhost:3000/
</Location>

И в моем приложении rails:

# added to end of file C:\redmine\config\environment.rb
ActionController::AbstractRequest.relative_url_root = "/redmine"

Теперь это работает!


Я не был полностью доволен этим подходом — я столкнулся с некоторыми проблемами перенаправления. Это еще одна попытка, которая пока работает хорошо.

Этот второй подход кажется лучше.


ОБНОВЛЕНИЕ:

Как отмечено в комментариях, для более поздних приложений, работающих на Rails 2.3.2+, используйте это вместо этого:

config.action_controller.relative_url_root = '/redmine'

Я поместил его в новый файл additional_environment.rb.

person Michael Haren    schedule 22.01.2009
comment
Я настоятельно рекомендую Пассажир. Делает хостинг рельсов почти таким же простым, как PHP. - person Samuel; 23.01.2009
comment
Я на окнах, поэтому я не думаю, что это сработает для меня. Спасибо хоть. - person Michael Haren; 23.01.2009
comment
На самом деле это ActionController::Base.relative_url_root, начиная с Rails 2.3.x. - person Wojciech Kaczmarek; 20.05.2010
comment
Нужно ли устанавливать разные порты для каждого приложения Rails? - person Olivier Lalonde; 18.11.2010
comment
@Olivier У меня он работает только под другим портом (3000), потому что apache работает на порту 80. Если вы размещаете несколько приложений rails с одним и тем же веб-сервером, вы должны использовать один и тот же порт для всех - person Michael Haren; 19.11.2010

Если вы все еще хотите использовать Mongrel + Apache с обратным прокси-сервером, вот как я решил ту же проблему в нашей системе (Win2k3, Apache 2.2, транк Redmine). Секрет в том, чтобы установить службу дворняг, используя --prefix /redmine, которая говорит ему обслуживать ее из http://localhost:port/redmine.

В Apache httpd.conf (или подходящий включаемый файл):

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

<IfModule mod_proxy.c>
ProxyRequests Off
#No need to forward on static content - let apache do it faster
ProxyPass /redmine/images ! 
ProxyPass /redmine/stylesheets ! 
ProxyPass /redmine/javascript ! 
# Remove the following entry on public sites as this is insecure
ProxyPass /redmine/plugin_assets !
ProxyPass /redmine/help ! 
ProxyPass /redmine http://localhost:4000/redmine
ProxyPassReverse /redmine http://localhost:4000/redmine
ProxyPreserveHost On
#continue with other static files that should be served by apache
Alias /redmine/images C:/Repositories/redmine/public/images/
Alias /redmine/stylesheets C:/Repositories/redmine/public/stylesheets/
Alias /redmine/javascript C:/Repositories/redmine/public/javascript/
# Remove the following on public sites as this is insecure
Alias /redmine/plugin_assets C:/Repositories/redmine/public/plugin_assets/
Alias /redmine/help C:/Repositories/redmine/public/help/
</IfModule>

# Make sure apache can see public and all subfolders - not suitable for public sites
<Directory "C:/Repositories/redmine/public/">
    Allow from all
    Order allow,deny
</Directory>

Mongrel устанавливается как таковой:

mongrel_rails service::install --prefix /redmine -N redmine_prod -p 4000 -e production -c C:\Repositories\redmine

Надеюсь, это поможет кому-то. Сначала я попытался настроить Apache + fastcgi и т. д., но потерял больше драгоценных волос — это не подходит для Windows.

P.S. Я нашел этот PDF-файл очень полезным справочным материалом: http://www.napcsweb.com/howto/rails/deployment/RailsWithApacheAndMongrel.pdf

/Дэмиен

person Damien    schedule 09.02.2009

Passenger (http://modrails.com) — лучшая альтернатива fastcgi, поскольку его очень легко настроить. Я бы рекомендовал использовать это для размещения ваших приложений rails с использованием конфигурации, аналогичной той, что у вас есть сейчас

person Ryan Bigg    schedule 23.01.2009
comment
Тем не менее, это первый результат Google, и Майкл добавил тег windows2003 более 3 часов назад. - person Samuel; 23.01.2009
comment
И при чем здесь windows2003? Пассажирские работы. - person Ryan Bigg; 23.01.2009
comment
По словам пассажира сайт windows не поддерживается. Если это так, пожалуйста, дайте ссылку, говорящую об этом, и я проверю это! - person Michael Haren; 23.01.2009

Согласен с Радаром. Passenger действительно прост в настройке, позволяет приложениям Rails совместно использовать память, снимает бремя управления кластером ублюдков и практически не требует настройки. Все, что вам нужно, это специальный файл config.ru с конфигурацией RackUp и DocumentRoot, указывающий на набор RAILS_ROOT/public в Apache.

person Aram Verstegen    schedule 09.02.2009
comment
Нет - с незапланированной поддержкой Windows так и не появится. См. bitnami.org/forums/forums/2/topics/477. - person Damien; 10.02.2009