2016年5月19日木曜日

【Rails4.2.6】capistrano3でメンテナンス画面を表示する

  • 公開日: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に記述します。

{project_folder}/Gemfile

group :development do
  gem 'capistrano-maintenance', '~> 1.0'
end

bundleを使ってインストールします。

terminal

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ファイルに、メンテナンス画面ファイルの有無の実装が必要です。

以下のように記載します。

/etc/nginx/conf.f/project.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コマンドでメンテナンス画面を表示します。

terminal

bundle exec cap staging maintenance:enable REASON="hardware upgrade" UNTIL="12pm Central Time"

ブラウザには以下のような画面が表示されます。

メンテナンス画面

capコマンドでメンテナンス画面を削除します。

terminal

bundle exec cap staging maintenance:disable

ブラウザでメンテナンス画面が非表示になることを確認してください。

本番のdeploy作業では、メンテナンスコマンドの後に、bundle exec cap production deploy等のコマンドを実行することになります。

まとめ

メンテナンス画面の切り替えは、手動だと意外と面倒な作業です。間違えも起きやすいです。
とても便利なツールなので、capistrano3でdeployをおこなっている開発者は、capistrano-maintenanceを利用してみてください。

以上。

PICK UP オススメ書籍

運営サイト(railsで作成しています)

参考記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...