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) из внешки.

One Comments to “rails 3 на nginx+mongrel”

  1. Elfiel пишет:

    Ставь thin, замечательно себя оправдывает в связке с nginx.

Leave a Reply to Elfiel

(обязательно)

(обязательно)