Hina-Mode

とある呑んだくれエンジニアの気が向いた時に書く戯言

FuelPHPでメンテナンスモードパッケージを作成してみた

hinashiki/fuelphp-maintenance · GitHub

とある複数サイトで独自の503ルールが必要になったため、せっかくだからとパッケージにしてみました。

fuel/app/config/maintenance.php

<?php
return array(
  "maintenance_mode" => true
);

を作成し、Contoller::before()へ

\MaintenanceMode::check();

を入れれば、アプリケーション全体がメンテナンスモードになります。
メンテナンスモード中はステータス503を常に返し、返されるビューは固定されます。

capistranoなどのdeployで利用したい場合はfalseのファイルも持っておいてファイルを入れ替えれば素敵なメンテナンス切り替えが可能になります。

一応パッケージ内にデフォルトのビューを用意していますが、自分で作成したい場合は
fuel/app/views/503.php
を作成していただければ大丈夫です。

また、503.php以外をビューに利用したい場合は

fuel/app/config/maintenance.php

<?php
return array(
  "maintenance_mode" => true,
  "view" => "hogehoge"
);

という感じでhogehogeにビューパスを指定していただければ変更できるようになっています。

また、メンテナンスモードに移行するのにいちいちdeployカマしたくないというずぼらな方の為に、 503を強制throwできるようにしています。

throw new \HttpServerMaintenanceException();

を投げれば、メンテナンスモードの画面を返します。

外部DBやAPIへの接続に失敗した場合にthrowするようにすれば、該当APIなどを停止するだけでサイト側も自動でメンテナンスモードへ移行し、HTTPステータス503を返すことが出来ます。

メンテナンスモードを実装するには他にも

FuelPHP でシンプルメンテナンスモード - Qiita

上記のような方法があるのですが、

コントローラーまで処理が渡らないので、コントローラーが必要な処理は出来ない

ということでしたので、まぁ使い分けが出来ればいいかなー位にサクッと作りました。

どこかで役に立てば幸いです。