capistranoには、以下のコマンドを実行する事で、メンテナンスページを用意する機能があります。
pre>>
% cap deploy:web:disable
<<--
コマンドを実行すると、デプロイ先のサーバ上で、shared/system/maintenance.html が生成されます。
shared以下のディレクトリは、public/の下にシンボリックリンクが作成されるので、
結果としてpublic/system/maintenance.htmlが準備される事になります。
しかし、capistranoがやってくれるのはここまでなので、
maintenance.htmlが存在した場合にそれを表示するようにするように、
Webサーバを設定する作業は自分でやる必要があります。
mod_railsとかでその辺まで面倒みてくれる感じになっていると楽なんですけどね。
その設定については、Apacheを使っている場合は以下のような感じにすればOKです。
pre>>
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
RewriteCond %{REQUEST_URI} !^/images/
RewriteCond %{REQUEST_URI} !^/javascripts/
RewriteCond %{REQUEST_URI} !^/stylesheets/
RewriteRule ^.$ /system/maintenance.html [L]
RewriteRule ^/(images|javascripts|stylesheets)/(.)$ /$1/$2 [L]
<<--
ちなみに、メンテナンスページを取り下げるには、以下のコマンドを実行します。
pre>>
% cap deploy:web:enable
<<--
これで、maintenance.htmlが削除されます。
See Also