2011-01-15 12 views
3

リクエストを処理する前に、有効なデータベースを確認するCFアプリケーションを取得するのはいいですか?ライブデータソース名を確認する前に

これは、データベースサーバーがダウンしているかアップグレードされている可能性があるため、db依存の要求が行われたときにエラーが発生する可能性があるからです。

dbサーバーに接続していない場合、ユーザーは安全なページに安全にリダイレクトできます。

cfcatchは動作しますか?

このチェックはどのように行うことができますか?

ありがとうございます。

答えて

4

Application.cfcファイルのonRequestStartメソッドまたはApplication.cfmファイルで、データベースが使用可能であることを確認する簡単なクエリを実行できます。 cftry/cfcatchでクエリをラップします。クエリが失敗した場合は、cfcatchでユーザーをリダイレクトできます。成功した場合は、データベースが「生きている」と合理的に確信できます。

2

私はこのような小切手を1つのプロジェクトで使用しました。コードは(それが8より低いのColdFusionのバージョンで動作するかどうかわからない)、次のようなルックスは、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を広範囲に使用する習慣があります。しかし、あなたのデータソースが頻繁に盛り上がるかもしれない場合、それはより意味があるかもしれません。

+1

これは素晴らしい解決策ですが、サービスファクトリの使用は技術的に文書化されておらず、ColdFusionの新しいバージョンでは削除することができます。同様の、まだ文書化されているアプローチは、AdminAPIを使用することです。基本的には同じことを行います(データソースを確認する)が、サポートされています。 –

2

すべてのリクエストに追加のクエリを追加して、データベースが稼働していることを確認してください。より良いアプローチは、計画メンテナンス(アップグレードなど)を行っているときに手動で有効にする、アプリケーションに「メンテナンスモード」スイッチを構築することです。

エラー(データベースの問題など)が発生したときに「使いやすい」ページを表示するには、Application.cfcのonError()メソッドとApplication.cfmの<cferror .../>タグをグローバルエラーハンドラとして使用します。

0

DBが消えてしまうのであれば、N分ごとに実行されるOnRequestStartハンドラに「SELECT 1 AS A」というクエリを実装します。これは、クエリキャッシング機能を使用して実行できます。私は30分ごとにクエリを実行することから始めます。

関連する問題