- 公開日:2016年05月19日
- 最終更新日:2016年05月26日
記事概要
capistrano3のアプリビルド時にメンテナンス画面を表示する方法を記載した記事です。
環境
- rbenv
- bundler
- rails 4.2.6
- ruby 2.3.0
- capistrano 3.2.1
- Nginx 1.8.1
ビルド時のメンテナンス画面
WEBアプリのデプロイをする時に、一時的にメンテナンス画面を出したい時があります。
例えば、databaseの変更が必要でdb:migrateをする時や、大きな追加機能や修正がある場合です。
capistrano3には、メンテナンス画面の表示非表示を切り替える機能があります。
それを使ってdeploy時に簡単にメンテナンス画面を表示できます。
capistrano-maintenanceのインストール
capistrano3でメンテナンス画面の非表示をするには、capistrano-maintenanceというGemを利用します。
以下のようにGemfileに記述します。
group :development do gem 'capistrano-maintenance', '~> 1.0' end
bundleを使ってインストールします。
cd {project_folder} bundle Installing capistrano-maintenance 1.0.0
rails側の準備は以上です。
Nginxの修正
続いてNginxの修正です。
capistrano-maintenanceは、capコマンドを叩くと、
{project_folder}/shared/public/system/maintenance.html
というファイルの生成と削除がおこなえるライブラリです。
つまり、メンテナンス画面ファイルの作成と削除の操作をcapコマンドでコントロールするライブラリです。
なので、Nginxのconfファイルに、メンテナンス画面ファイルの有無の実装が必要です。
以下のように記載します。
error_page 503 @503; # Return a 503 error if the maintenance page exists. if (-f {project_folder}/shared/public/system/maintenance.html) { return 503; } location @503 { # Serve static assets if found. if (-f $request_filename) { break; } # Set root to the shared directory. root {project_folder}/shared/public; rewrite ^(.*)$ /system/maintenance.html break; }
実装ポイントは以下となります。
ファイルの存在チェック
Nginxでは、-fはファイルが存在するかを示すオプションです。なので、
-f {project_folder}/shared/public/system/maintenance.html
は、maintenance.htmlが存在する場合にtrueを返します。
つまり、この記述で、maintenance.htmlの有無で閲覧ファイル先を切り替えています。
capistrano3の実行
では、実際に実行します。
capコマンドでメンテナンス画面を表示します。
bundle exec cap staging maintenance:enable REASON="hardware upgrade" UNTIL="12pm Central Time"
ブラウザには以下のような画面が表示されます。
capコマンドでメンテナンス画面を削除します。
bundle exec cap staging maintenance:disable
ブラウザでメンテナンス画面が非表示になることを確認してください。
本番のdeploy作業では、メンテナンスコマンドの後に、bundle exec cap production deploy等のコマンドを実行することになります。
まとめ
メンテナンス画面の切り替えは、手動だと意外と面倒な作業です。間違えも起きやすいです。
とても便利なツールなので、capistrano3でdeployをおこなっている開発者は、capistrano-maintenanceを利用してみてください。
以上。
0 件のコメント:
コメントを投稿