Как настроить nginx + Unicorn, чтобы избежать ошибок тайм-аута?
У меня есть приложение Rails (v3.2.13, Ruby 2.0.0), работающее на nginx + Unicorn (Ubuntu 12.04). Все работает хорошо, кроме случаев, когда пользователь-администратор загружает пользователей (тысячи) через файл CVS. Проблема в том, что я установил тайм-аут на 30 секунд, а процесс импорта занимает гораздо больше времени. Итак, через 30 секунд я получаю страницу nginx 502 Bad Gateway (рабочий Unicorn убит).
Очевидное решение - увеличить время ожидания, но я не хочу этого, потому что это вызовет другие проблемы (я полагаю), потому что это не типичное поведение.
Есть ли способ справиться с такого рода проблемами?
Заранее большое спасибо.
PS: может быть, решение заключается в изменении кода. Если это так, я хочу, чтобы пользователь не выполнял другой запрос.
Некоторые идеи (не знаю, если это возможно):
Настройте работника, посвященного этому запросу.Отправьте Unicorn сигнал «в процессе», чтобы не быть убитым.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"