Catalyst を使用する場合、Rails の場合のように開発、テスト、および本番データベースを指定する方法はありますか? ドキュメントに目を通しましたが、答えが見つかりませんでした。
1 に答える
cpanCatalystテストチュートリアルからの参照
ライブアプリケーション用の「本番データベース」とテストケース用の「テストデータベース」の両方を維持することをお勧めします。
モデルクラスでのデータベース構成の切り替え
1つの解決策は、データベース仕様を環境変数でオーバーライドできるようにすることです。たとえば、エディタでlib / MyApp / Model / MyAppDB.pmを開き、
__PACKAGE__->config(...
宣言を次のように変更します。my $dsn = $ENV{MYAPP_DSN} ||= 'dbi:SQLite:myapp.db'; __PACKAGE__->config( schema_class => 'MyAppDB', connect_info => [ $dsn, '', '', { AutoCommit => 1 }, ], );
次に、テストケースを実行するときに、次のようなコマンドを使用できます。
$ cp myapp.db myappTEST.db
$ CATALYST_DEBUG = 0 MYAPP_DSN = "dbi:SQLite:myappTEST.db"は--lib lib -vt/live_app01.tを証明しますこれにより、テストケースの実行中にのみDSNが変更されます。MYAPP_DSN環境変数を定義せずに通常のアプリケーションを起動すると、デフォルトで以前と同じdbi:SQLite:myapp.dbになります。
複数の構成ファイルを使用したデータベース構成の切り替え
Catalyst :: Plugin :: ConfigLoaderの機能を利用して、環境変数に基づいて複数の構成ファイルをロードすることにより、デフォルトの(本番)データベース接続設定をオーバーライドできます。
テストスクリプトで$ENV{MYAPP_CONFIG_LOCAL_SUFFIX}を'testing'に設定すると、myapp.confの後にmyapp_testing.confという名前の追加の構成ファイルが読み込まれ、myapp.confのパラメーターが上書きされます。
テストスクリプトのBEGINブロックで環境変数を設定して、Catalystアプリケーションを開始する前に設定されていることを確認する必要があります。
以下は、MyDBという名前のDBIx::ClassモデルとFooという名前のコントローラーの構成およびテストスクリプトの例です。
myapp_testing.conf:
<Model::MyDB> <connect_info> dsn dbi:SQLite:myapp.db </connect_info> </Model::MyDB>
別のデータベースを使用する場合もこれを確認してください