Pull to refresh

Запуск Ruby on Rails приложений на shared-хостинге на примере баг/таймтрекера Redmine

Reading time 2 min
Views 6K
Для своего нового проекта я как раз сейчас устанавливаю рабочее окружение, и ключевое место в нем занимает баг/таймтрекер+wiki. Платные реализации извесны (тот же Basecamp, Fogbugs, updatelog.com), но хотелось найти что-то что хостится на моём сервере. Из извесного и хорошо работающего — это Bugzilla (с очень скромным функционалом), Trac(есть все, но только 1 проект), и вот только что наткнулся на «новый» проект (около 3-х лет ему) — Redmine. Практически аналог вышеупомянутых платных сервисов, но бесплатный. Проблема для меня в том, что он написан на Ruby On Rails, и как оказалось деплоймент ROR приложений может быть не слишком простым (по крайней мере для таких новичков в этом деле как я). Так как хостинг не специализируется на Ruby, Passenger-а нету. В конечном итоге оказалось что это все не так уж и сложно :-)


Стандартные инструкции по инсталляции подразумевают запуск встроенного WebServer-а WEBrick (вместо Apache). Конечно, можно систему развернуть на VPS сервере, и тогда все заработает за 5 минут. На shared-хостинге придется прикручивать к Apache. Сделать это удалось так:
1. rails ~/my_rails_app Создаем приложение-пустышку (возможно это не обязательно делать)
2. rm -rf ~/www/<your domain name>/ Удаляем каталог для сайта созданного по умолчанию cpanel
3. ln -s ~/my_rails_app/public ~/www/<your domain name> Создаем символическую ссылку для статики и FCGI-dispatcher-а
4. Из ~/my_rails_app/public сохраняем куда-нить .htaccess и dispatcher.*, могут понадобится. Прибиваем содержимое ~/my_rails_app и разворачиваем туда содержимое требуемого ROR приложения
5. Теперь в ~/my_rails_app/public нужно сделать .htaccess, или отредактировать имеющийся, чтобы получилось так:

AddHandler fastcgi-script .fcgi
Options +FollowSymLinks +ExecCGI

RewriteEngine On
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

Копируем dispatch.fcgi.example в dispatch.fcgi, и исправляем внутри путь к environment, и ruby-интерпретатору. Хочу заметить, что использовать надо именно fcgi, просто cgi будет тормозить безбожно (в этом месте я и узнал что в режиме fcgi раньше все падало раз в 4 минуты из-за утечек памяти :-) )

Теперь можно заходить на <your domain name> и наслаждаться работающим Ruby-приложением :-) Если все работает — идем в /config/environment.rb и включаем Production режим раскоменчивая строчку #ENV['RAILS_ENV'] ||= 'production'

Надеюсь людям — не специалистам по Ruby будет полезно :-)
Tags:
Hubs:
+11
Comments 46
Comments Comments 46

Articles