その要求の処理に進む前に、有効なデータベースを確認するように CF アプリを取得してもよろしいでしょうか?
これは、データベース サーバーがダウンしている、またはアップグレード中のインスタンスが存在する可能性があるためです。そのため、db 依存の要求が行われるとエラーが発生します。
db サーバーへの接続がない場合、ユーザーは安全なページに安全にリダイレクトできます。
または、cfcatch は機能しますか?
このチェックはどのように行うことができますか?
ありがとうございました。
その要求の処理に進む前に、有効なデータベースを確認するように CF アプリを取得してもよろしいでしょうか?
これは、データベース サーバーがダウンしている、またはアップグレード中のインスタンスが存在する可能性があるためです。そのため、db 依存の要求が行われるとエラーが発生します。
db サーバーへの接続がない場合、ユーザーは安全なページに安全にリダイレクトできます。
または、cfcatch は機能しますか?
このチェックはどのように行うことができますか?
ありがとうございました。
Application.cfc ファイルの onRequestStart メソッドまたは Application.cfm ファイルで簡単なクエリを実行して、データベースが使用可能であることを確認できます。cftry/cfcatch でクエリをラップします。クエリが失敗した場合は、cfcatch でユーザーをリダイレクトできます。クエリが成功した場合は、データベースが「生きている」ことを合理的に確信できます。
あるプロジェクトでこのようなチェックを使用しました。コードは次のようになります (ColdFusion 8 より前のバージョンで動作するかどうかは不明です)。このサンプルは、CFScript で記述された UDF のチャンクであると考えてください。
// service factory object instance
factory = CreateObject("java","coldfusion.server.ServiceFactory");
// the datasource service
dsService = factory.DatasourceService;
// verify the dsn
return dsService.verifyDataSource(arguments.dsn);
ああ、数年前に古いラップトップで書いたコードに小さなメモさえ見つけました。
// [performance note] this server check takes 1-3ms at local PC (Kubuntu 7.10, CF8 + Apache2, Sempron 3500+, 1GB RAM)
時間は短いように見えますが、リクエストごとにこのチェックを行うことは、アプリケーションにとってあまり役に立たないことがわかりました。いずれにせよ、エラー処理のために try/catch を広範囲に使用する習慣があります。ただし、データソースが頻繁に変更される可能性がある場合は、より理にかなっている可能性があります。
データベースが稼働していることを確認するためにすべてのリクエストに余分なクエリを追加することは、明らかに悪い考えです。より良いアプローチは、計画されたメンテナンス (アップグレードなど) を行うときに手動で有効にする「メンテナンス モード」スイッチをアプリケーションに組み込むことです。
エラー (データベースの問題など) が発生したときに「分かりやすい」ページを表示したい場合はonError()
、Application.cfc のメソッドや<cferror .../>
Application.cfm のタグをグローバル エラー ハンドラとして使用します。
データベースが消えるのではないかと心配している場合は、N 分ごとにのみ実行される OnRequestStart ハンドラーに「SELECT 1 AS A」クエリを実装します。これは、クエリ キャッシュ機能を使用して実現できます。30 分ごとにクエリを実行することから始めます。