0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[baserCMS]データベース接続に失敗した際のエラー画面をカスタマイズする

Posted at

利用しているデータベース(DB)への接続に、何らかの理由で失敗した場合、baserCMSでは以下のエラー表示画面となります。
DBサーバは、起動していれば常にOKというわけではなく、システムなので完璧100%稼働する保証はありません。
ときには過剰な負荷により接続できなくなったり、DBサーバ側でのDB名や接続情報の変更に伴い、影響を受けることもあり得ます。そういったときに表示される内容が、baserCMSの本体コア側で準備されています。
準備されている内容は、あくまで汎用的なシンプルな構成となっているため、利用しているウェブサイトのデザインに近づけておいたり、文言を変更しておくことで、閲覧者への案内に繋げることができます。
sc_db_error.png

想定している対象者

  • baserCMSでウェブサイトを制作をしている方

発生状況

  1. サーバ上に設置しているbaserCMSで、何らかの理由でDBへの接続が失敗する場面

環境

  • baserCMS 4.5.5(※4系全般)

表示に利用されているファイル

  • レイアウト側: /lib/Baser/View/Layouts/missing_connection.php
  • コンテンツ部分側: /lib/Baser/View/Errors/missing_connection.php

対処

DB接続エラー時は、全体大枠のレイアウトとして /lib/Baser/View/Layouts/missing_connection.php が利用されます。
ですので、こちらのレイアウトファイルを /app/View/Layouts/ 配下にコピーした上で、内容・外観を調整しておくと良いです。

  • /lib/Baser/View/Layouts/missing_connection.php
    • → /app/View/Layouts/missing_connection.php

通常であればテーマ側のファイルが利用されますが、DB接続エラーの場合、そもそも利用しているDB内に保持しているテーマ情報の利用と取得がなされないため、オーバーライド機構の動作として以下のようになります。

  • DB接続OK時
    1. テーマ側利用
    2. app側利用
    3. コア側利用
  • DB接続NG時
    1. [不可]テーマ側利用
    2. app側利用
    3. コア側利用

baserCMSコア側のファイルを直接触っても良いですが、コア側のバージョンアップ時に上書きしてしまう可能性が高いため、app側に複製設置して利用しておくと良いです。

コンテンツ部分側においても同様となります。

  • コンテンツ部分側: /lib/Baser/View/Errors/missing_connection.php
    • → /app/View/Errors/missing_connection.php

DB接続エラー以外のエラーにも対応しておく

上記ではDB接続エラーに関しての対応手法となりますが、他のエラーに対しても同様の表示調整を行っておくことができます。
ただし、DB接続以外の場合、基本的にはテーマ側のエラー用ビューが利用されますのでご紹介だけ。

  • レイアウト側: /lib/Baser/View/Layouts/error.php
  • コンテンツ部分側: エラー内容に応じて /lib/Baser/View/Errors/ 配下のファイルが利用される
    • /lib/Baser/View/Errors/error400.php
    • /lib/Baser/View/Errors/error500.php
    • /lib/Baser/View/Errors/fatal_error.php
    • /lib/Baser/View/Errors/missing_class.php

2つのレイアウトを別々に調整しておいても良いのですが、まとめておくこともできます。

レイアウト側

  1. /lib/Baser/View/Layouts/error.php を /app/View/Layouts/error.php に複製して中身を調整する
  2. /lib/Baser/View/Layouts/missing_connection.php を /app/View/Layouts/missing_connection.php に複製する
  3. /app/View/Layouts/missing_connection.php の中身を以下にする
/app/View/Layouts/missing_connection.php
require __DIR__ . '/error.php';

コンテンツ側

  • コア側のエラー用ビューをテーマ内に複製して中身を調整する
    • /lib/Baser/View/Errors/missing_connection.php → /app/View/Errors/missing_connection.php (※ここだけ注意)
    • /lib/Baser/View/Errors/error400.php → /app/webroot/theme/YOUR_THEME/Errors/error400.php
    • /lib/Baser/View/Errors/error500.php → /app/webroot/theme/YOUR_THEME/Errors/error500.php
    • /lib/Baser/View/Errors/fatal_error.php → /app/webroot/theme/YOUR_THEME/Errors/fatal_error.php
    • /lib/Baser/View/Errors/missing_action.php → /app/webroot/theme/YOUR_THEME/Errors/missing_action.php
    • /lib/Baser/View/Errors/missing_class.php → /app/webroot/theme/YOUR_THEME/Errors/missing_class.php

案内文章の例

掲載文章としてはこんな感じで載せておくと良いですね。

現在、ウェブサイトが混み合っているか、一時的な閲覧エラーが発生しております。
お時間を置いて再度アクセスするなど、今しばらくお待ちください。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?