symfony 1.4 で簡単メンテナンスモード

inspired by

流行に乗っかって symfony 1.4 でもやってみます。

メンテナンス画面を用意する

プロジェクトルート/config/unavailable.php にHTMLファイルを用意します。
拡張子はphpになっていますが、素のHTMLとして書いた方がいいです。

./config/unavailable.php
<!DOCTYPE HTML>
<html lang="ja-JP">
<body>
  <h1>メンテナンス中</h1>
</body>
</html>

設定でロック機能を有効にする

標準の設定だと、このunavailable.phpを利用する機能は無効になっています。
なので、以下のようにアプリケーションに設定を書いておきます。

apps/アプリケーション名/config/settings.yml
all:
  check_lock: true

コマンドで切り替える

あとは、コマンドを叩くだけです。

メンテナンス画面に切り替える場合
$ ./symfony project:disable prod

タスクに渡す引数は環境名です。通常は本番環境だと思うので、標準だとprodになります。
また、環境名の後にアプリケーション名を渡せば特定のアプリケーションだけメンテナンス画面にすることもできます。

メンテナンス画面を終わる場合
$ ./symfony project:enable prod

これでunavailable.phpを呼び出さなくなります。

ドキュメントでは
symfony 1.x legacy website
あたりが参考になります。

フレームワーク側で用意されているので簡単すぎます。
この仕組みを知っているかどうかというところだけですw

時間指定でメンテナンス画面に切り替える

CakePHPのメンテナンスプラグインは時間指定できて便利だと思ったのでsymfonyで同じことを簡単に実装する方法を追記です。

といっても、タスクが用意されているのでこのタスクをコンソールから指定時間にたたいてくれるようにatコマンドを使うだけです。

$ /PATH_TO_SF_PROJECT/symfony project:disable prod |at 21:00 12/31/2011

こうしておけば、指定時間にメンテナンス画面に自動的に切り替わります。symfonyは直接関係ないですがタスクで用意されているのでできる便利機能ですね。

[追記] ドキュメントへのリンクと説明を追加しました。
[追記2] この機能を有効にするためにsettings.ymlへの設定が必要だったのを忘れていたので追記しました。Thanks to @jiskanulo
[追加3] CakePHPの場合へのリンクと指定時間にメンテナンス画面にする方法を追加