Запуск Rails приложений
Вариантов запуска Rails приложений существует несколько. Я выбрал такую схему:
- все входящие запросы поступают на сервер nginx - это frontend;
- статические файлы (графика, видео, css) nginx отдаёт сразу клиенту;
- динамические запросы проксируются на кластер mongrel серверов - это backend;
Зачем нужен nginx можно прочитать здесь, сравнение производительности для разных способов запуска здесь.
Приступим к реализации этой схемы.
Для начала нужно установить весь необходимый софт:
1. Установка nginx, mongrel, ruby, rail в redhat 9
1.1. ставим ruby
#wget ftp://ftp.ruby-lang.org/pub/ruby/ruby-1.8.6.tar.gz
#tar xvzf ruby-1.8.6.tar.gz
#cd ruby-1.8.6
#./configure --prefix=/usr
#make
#make install
1.2. ставим rubygems
#wget http://rubyforge.org/frs/download.php/20989/
rubygems-0.9.4.tgz
#tar zxf rubygems-0.9.4.tgz
#cd rubygems-0.9.4
#ruby setup.rb
1.3. ставим rails
#gem update
#gem install rails --include-dependencies
1.4. установка mongrel
#gem install mongrel
#gem install mongrel_cluster
1.5. установка nginx
#wget http://sysoev.ru/nginx/nginx-0.5.27.tar.gz
#tar zxf nginx-0.5.27.tar.gz
#cd nginx-0.5.27
#./configure
#make
#make install
Весь необходимый софт установлен приступаем к его настройке.
2. Настройка
Создаём тестовое rails приложение
#cd /www/mydomain.ru/
#rails demo
создаём пользователя и группу mongrel, настраиваем права доступа к файлам
#groupadd mongrel
#adduser -r -g mongrel mongrel
#chown -R mongrel:mongrel /www
Генерируем конфигурационный файл для mongrel-а
#mongrel_rails cluster::configure -e production -p 8001 -N 2 -c /www/demo -a 127.0.0.1 -l log/mongrel.log -P log/mongrel.pid --user mongrel --group mongrel
Запускаем mongrel из под пользователя apache, кластер из 2-ух процессов, порты соответственно 8001-8002. После этого будет создан файл config/mongrel_cluster.yml
настраиваем автозапуск mongrel-а
#mkdir /etc/mongrel_cluster
#ln -s /www/demo/config/mongrel_cluster.yml
/etc/mongrel_cluster/demo.yml
#cp /usr/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.2/
resources/mongrel_cluster /etc/init.d/
#chmod +x /etc/init.d/mongrel_cluster
#chkconfig --level 345 mongrel_cluster on
#chkconfig --list | grep mongrel_cluster
пробуем запустить mongrel и проверяем
#/etc/init.d/mongrel_cluster start
#lynx http://127.0.0.1:8001/
при таком запуске будут стартовать все кластеры у которых файл настроек лежит в каталоге /etc/mongrel_cluster/
Итак mongrel стартует, теперь настраиваем фронтэнд nginx.
Настройки nginx лежат в файле /usr/local/nginx/conf/nginx.conf, изменяем настройки таким образом:
http {
upstream mongrel {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
}
server {
listen 80;
server_name mydomain.ru;
location / {
root /www/demo;
index index.html index.htm;
}
location ~ ^/$ {
if (-f /index.html) {
rewrite (.*) /index.html last;
}
proxy_pass http://mongrel;
}
location / {
if (!-f $request_filename.html) {
proxy_pass http://mongrel;
}
rewrite (.*) $1.html last;
}
location ~ .html {
root /www/demo/public;
}
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|
gz|rar|bz2|doc|xls|pdf|ppt|txt|tar|mid|
midi|wav|bmp|rtf|js|mov)$ {
root /www/demo/public;
}
location / {
proxy_pass http://mongrel;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
}
}
запускаем nginx
#/usr/local/nginx/sbin/nginx
3. Ссылки
Настройка nginx+rails
Документация по nginx.
Зачем нужен nginx.
Тестирование производительности для разных вариантов запуска rails приложения.
25. March, 2008 в 17:12
[…] PuTTY Connection Manager (февраля 1, 2008) […]