Настройка приложения 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>
Любые предложения?
Ответы
Ответ 1
Вот что мне пришлось изменить:
Я удалил конечную косую черту:
<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"
Теперь он работает!
Я не был полностью доволен этим подходом - я столкнулся с некоторыми проблемами с перенаправлением. Это еще одна попытка, которая пока работает хорошо.
Этот второй подход кажется лучше.
UPDATE:
Как отмечено в комментариях, для более поздних приложений, работающих на Rails 2.3.2+, используйте это вместо:
config.action_controller.relative_url_root = '/redmine'
Я помещаю его в новый additional_environment.rb
файл.
Ответ 2
Если вы все еще хотите использовать Mongrel + Apache с использованием обратного прокси, вот как я решил ту же проблему в нашей системе (Win2k3, Apache 2.2, trunk of Redmine). Секрет заключается в том, чтобы установить вашу mongrel-службу, используя --prefix /redmine
, которая сообщает ей, чтобы она служила ей из http://localhost:port/redmine
В Apache httpd.conf(или подходящий файл include):
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 очень полезным referene: http://www.napcsweb.com/howto/rails/deployment/RailsWithApacheAndMongrel.pdf
/Damien
Ответ 3
Пассажир (http://modrails.com) является лучшей альтернативой fastcgi, потому что он очень прост в настройке. Я бы рекомендовал использовать это для размещения ваших рельсов приложения, использующие аналогичную конфигурацию, с тем, что у вас есть сейчас
Ответ 4
Я согласен с Радаром. "Пассажир" очень прост в настройке, позволяет приложениям Rails обмениваться памятью, снимает нагрузку с управления кластером mongrels и не требует практически никакой настройки. Все, что вам нужно, это специальный файл config.ru с RackUp config и DocumentRoot, указывающий на RAILS_ROOT/общедоступный набор в Apache.