I have an application in rails and it runs unicorn in production. There are some requests that take too long to process. I have configured the server to increase the timeout, so these request work correctly. The problem is that when the request takes more than 30 seconds to respond, I get this message:
Service Unavailable
The service is temporarily unavailable. Please try again later.
In unicorn.rb
I have timeout 120
configured and my nginx.conf is:
upstream unicorn_my_app {
server unix:/tmp/my_app.socket fail_timeout=0;
}
server {
listen 80;
client_max_body_size 4G;
server_name www.my_app.com;
proxy_read_timeout 120;
keepalive_timeout 5;
root /home/ubuntu/my_app/current/public;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://unicorn_my_app;
break;
}
}
error_page 404 500 502 503 504 /erro/erro.html;
location = /erro/ {
root /home/ubuntu/my_app/current/public;
}
}
Is there any other configuration that I forgot?
The configuration used is right. The problem in this case is that you are behind Rackspace Load Balance, which by default set timeout to 30 seconds. To change Rackspace Load Balance timeout value, follow this instructions. In abstract, you do two API calls:
1) Get a token:
2) Change LB timeout: