Как настроить nginx + Unicorn, чтобы избежать ошибок тайм-аута?
У меня есть приложение Rails (v3.2.13, Ruby 2.0.0), работающее на nginx + Unicorn (Ubuntu 12.04). Все работает хорошо, кроме случаев, когда пользователь-администратор загружает пользователей (тысячи) через файл CVS. Проблема в том, что я установил тайм-аут на 30 секунд, а процесс импорта занимает гораздо больше времени. Итак, через 30 секунд я получаю страницу nginx 502 Bad Gateway (рабочий Unicorn убит).
Очевидное решение - увеличить тайм-аут, но я нене хочу этого, потому что этоЯ буду вызывать другие проблемы (я думаю), потому что этоэто не типичное поведение.
Есть ли способ справиться с такого рода проблемами?
Заранее большое спасибо.
PS: может быть, решение заключается в изменении кода. Если это так, я хочу, чтобы пользователь не выполнял другой запрос.
Некоторые идеи (нене знаю, если это возможно):
Настройте работника, посвященного этому запросу.Отправить "работа в процессе" сигнал единорогу, чтобы избежать быть убитым.Nginx-app.conf
upstream xxx {
server unix:/tmp/xxx.socket fail_timeout=0;
}
server {
listen 80;
...
location / {
proxy_pass http://xxx;
proxy_redirect off;
...
proxy_connect_timeout 360;
proxy_send_timeout 360;
proxy_read_timeout 360;
}
}
unicorn.rb
worker_processes 2
listen "/tmp/xxx.socket"
timeout 30
pid "/tmp/unicorn.xxx.pid"