nginx を unicorn で使用している場合は、いくつかのパスを置き換えるだけで、以下の例を使用できます -
upstream unicorn {
server unix:/tmp/unicorn.rrorder.sock fail_timeout=0;
}
server {
listen 80;
server_name example.com;
root /home/deployer/apps/test/current/public;
location ~* ^/assets/ {
root /home/deployer/apps/test/current/public;
gzip_static on;
expires max;
add_header Cache-Control public;
add_header Last-Modified "";
add_header ETag "";
break;
}
try_files $uri/index.html $uri @unicorn;
location @unicorn {
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://unicorn;
}
error_page 503 @503;
if (-f $document_root/system/maintenance.html) {
return 503;
}
error_page 500 502 503 504 /500.html;
location @503 {
rewrite ^(.*)$ /system/maintenance.html break;
}
client_max_body_size 4G;
keepalive_timeout 30;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
}
これは私の実行可能なnginx構成です。動作するコードの下に追加するだけです。
error_page 503 @503;
if (-f $document_root/system/maintenance.html) {
return 503;
}
error_page 500 502 503 504 /500.html;
location @503 {
rewrite ^(.*)$ /system/maintenance.html break;
}
次に、 deploy.rb または production.rb capistrano ファイルに以下のコードを追加します
namespace :deploy do
namespace :web do
desc "Enable maintenance mode for apache"
task :disable, :roles => :web do
on_rollback { run "rm -f #{shared_path}/system/maintenance.html" }
page = File.read('public/maintenance.html')
put page, "#{shared_path}/system/maintenance.html", :mode => 0644
end
desc "Disable maintenance mode for apache"
task :enable, :roles => :web do
run "rm -f #{shared_path}/system/maintenance.html"
end
end
end
以下のコンテンツを含む public フォルダーに maintenance.html ファイルを追加します。
<!DOCTYPE html>
<html>
<head>
<title>The page you were looking for doesn't exist (404)</title>
<style type="text/css">
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
div.dialog {
width: 48em;
padding: 0 4em;
margin: 4em auto 0 auto;
border: 1px solid #ccc;
border-right-color: #999;
border-bottom-color: #999;
}
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
</style>
</head>
<body>
<div class="dialog">
<h1>Maintenance Mode</h1>
<p>"We are currently carrying out essential scheduled maintenance.
Normal service will resume shortly. Apologies for any inconvenience." </p>
<p>Sorry for the inconvenience!</p>
</div>
</body>
</html>
以下を参照してください。使用できるレーキ タスクは次のとおりです。
cap deploy:web:enable
cap deploy:web:disable
cap production deploy:web:enable
cap production deploy:web:disable
cap staging deploy:web:enable
cap staging deploy:web:disable
これは間違いなく魅力のように機能します!
乾杯!