rails 3 на nginx+mongrel
Некоторые люди, которым интересен iLukmus, наверняка заметили, что сайт работает, мягко говоря, нестабильно и падает по несколько раз в сутки. Я уже пробывал ставить сайт на Apache+Passenger и Nginx+Passenger, и в обоих этих вариантах ситуация с падениям web-сервера была идентичной. Вероятнее всего, я просто не умею их готовить их правильно настраивать, но проблему все равно нужно решать, а т.к. пробывать различные конфиги мне уже надоело, iLukmus переходит на Mongrel+Nginx.
установка Mongrel
Mongrel на ruby 1.9 устанавливается своеобразно, обычный способ с прописыванием гема в Gemfile рельсов здесь не прокатит и вызовет ошибку.
Ставим гем Mongrel’а:
1 | gem install mongrel --pre |
Прописываем гем в Gemfile ROR’а:
1 | gem 'mongrel', '>= 1.2.0.pre2' |
Ну и забандлим новый гем:
1 | bundle install |
Подробнее почему нужно ставить именно так и какая конкретно вылезает ошибка можно почитать здесь.
установка и настройка Nginx
установка
Предполагается, что Nginx был установлен вместе с Passenger’ом, но его можно установить и просто так:
1 | # yum install nginx |
настройка
Теперь открываем файл конфига nginx.conf и прописываем, что-то типа:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | user deploy; worker_processes 1; #error_log logs/error.log debug; events { worker_connections 1024; } http { include conf/mime.types; default_type application/octet-stream; sendfile on; #tcp_nopush on; keepalive_timeout 65; tcp_nodelay on; gzip on; gzip_min_length 1100; gzip_buffers 4 8k; gzip_types text/plain; upstream mongrel { server 127.0.0.1:3000; } server { listen 80; server_name example.com; root /var/www/apps/example/current/public; index index.html index.htm; try_files $uri/index.html $uri.html $uri @mongrel; location @mongrel { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x _forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://mongrel; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } |
Подробнее о конфиге написано на официальной вики-странице Nginx’а.
запуск
Сначала запускаем Mongrel:
1 2 3 4 5 6 7 | $ cd /var/www/apps/example/current/ $ rails s -e production => Booting Mongrel => Rails 3.0.10 application starting in production on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server |
Запустить Mongrel как демон можно так:
1 | $ rails s -e production -d |
И теперь запускаем Nginx, у меня, например, это выглядит так:
1 | # /opt/nginx/sbin/nginx |
Типа все, но надо не забыть запретить открытию порта Mogrel’а (здесь 3000) из внешки.
Ставь thin, замечательно себя оправдывает в связке с nginx.