I need to add maintenance page to some rails app, running with passenger and nginx. Here’s some config and steps.
You just need to add static html file to app_root/public/maintenance.html – and I assume css files on /assets url.
so, here’s nginx config:
server {
listen 80;
server_name = www.example.com;
root /home/deploy/www.example.com/public;
passenger_enabled on;
passenger_min_instances 5;
set $maintenance 0;
# is there maintenance file set?
if (-f $document_root/../tmp/maintenance.txt) {
set $maintenance 1;
}
# exclude /assets
if ( $uri ~* ^/assets\/\.* ) {
set $maintenance 0;
}
# in maintenance mode - send 503 status
if ($maintenance = 1) {
return 503;
}
# maintenance mode
error_page 503 @503;
# rewrite everything to maintenance.html
location @503 {
rewrite ^ /maintenance.html last;
break;
}
}
setting maintance mode is really simple – set app_root/tmp/maintenance.txt file – when escaping, just remove that file.