現在運用しているスマホアプリはWebView(WEBブラウザ)を採用しています。
先日サーバーリプレースを行った際のメンテナンス中の告知の仕組みをサーバー側に実装しました。

採用したのは Maintenance plugin for CakePHP です。
サーバー側のシステムは今となっては懐かしいCakePHP1.3です。リリースが2011年なので、まあ今となっては技術負債的な感じですね。

Maintenance plugin for CakePHP はCakePHPにアクセスしたコントローラーへのリクエストに対して、指定のメンテナンス画面にリダイレクトさせると言うだけのプラグインです。

ヘルプに実装方法が書かれていますが、ちょっと分かり辛い点もあるのでここでまとめておきます。


1)githubからプラグインをダウンロードして設置する

ダウンロードしたディレクトリを下のようにCakePHP1.3のプラグインディレクトリにコピーします。
app/plugins/maintenance
ディレクトリ名は「maintenance」です。


2)bootstrapへの仕込み

config/bootstrap.php に許可設定を追記します。trueでメンテナンス画面を表示させます。
Configure::write('Maintenance.enable', true);

3)AppControllerへの仕込み

controller/app_controller.php にメンテナンスページの挙動を追記します。
  var $components = array(
   'Maintenance.Maintenance' => array(
    'maintenanceUrl' => array(
 'controller' => 'pages', 
 'action' => 'maintenance'), 
//  'allowedIp' => array('xxx.xxx.xxx.xxx'), // allowed IP address when maintanance status 
//   'allowedAction' => array('pages' => array('*')) 
//    'users' => array('*')) // allowed action when maintanance status 

 ); 
ここの記述ちょっと分かり辛かったです。
表示するメンテナンスページは新たにコントローラーとアクションを準備しなければなりません。
    'maintenanceUrl' => array(
 'controller' => 'pages', 
 'action' => 'maintenance'), 
ここでは、controller/pages_controller.phpのmaintenanceアクションを指定しています。
class PagesController extends AppController {
function maintenance() {
$this->layout = "pages";
}
}

4)テンプレートへの仕込み


そしてテンプレートも用意します。
views/pages/maintenance.ctp
<div class="note">
ご不便をおかけして申し訳ありません。<br />
只今メンテナンス中です。<br />
</div>

次はコメントアウトしていますが、例外設定です。
例えばメンテナンス中に動作確認を行うためにメンテナンスページに行かないようしたくなると思いますが、これを指定します。自分IPを指定してここからアクセスはメンテナンスページに飛ばしません。
//  'allowedIp' => array('xxx.xxx.xxx.xxx'), // allowed IP address when maintanance status 
次は例外のコントローラーとアクションです。
メンテナンスページに飛ばしたくないコントローラーとアクションがあればここに記載します。
例えばAPI的なコントローラーがあって、動きを止めたくないものなどでしょうか。
//   'allowedAction' => array('pages' => array('*')) 
//    'users' => array('*')) // allowed action when maintanance status 

以上です。

これって2010年くらいに書くべき記事だよね。。今2015年っすよ。。
役に立つ人はいないだろう。きっと。