使用催化剂时,有没有办法像在Rails中那样指定开发,测试和生产数据库?我查看了文档,但我没有找到答案。
答案 0 :(得分:4)
参考cpan Catalyst Testing Tutorial
您可能希望同时为您的实时应用程序维护一个“生产数据库” 测试用例的“测试数据库”。
数据库配置在您的模型类别中切换
一种解决方案是允许使用环境变量覆盖数据库规范。例如,在编辑器中打开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 -v t / live_app01.t这将仅在测试用例运行时修改DSN。如果你 在没有MYAPP_DSN环境的情况下启动您的正常应用程序 变量定义,它将默认为相同的dbi:SQLite:myapp.db as 之前。
使用多个配置文件进行数据库配置切换
利用Catalyst::Plugin::ConfigLoader的功能进行加载 基于您可以覆盖的环境变量的多个配置文件 您的默认(生产)数据库连接设置。
在测试中将$ ENV {MYAPP_CONFIG_LOCAL_SUFFIX}设置为'testing' 脚本导致加载另一个名为的配置文件 myapp.conf之后的myapp_testing.conf将覆盖任何参数 在myapp.conf中。
您应该在您的BEGIN块中设置环境变量 测试脚本以确保在Catalyst应用程序之前设置它 启动。
以下是a的配置和测试脚本的示例 DBIx :: Class模型名为MyDB,控制器名为Foo:
myapp_testing.conf:
<Model::MyDB> <connect_info> dsn dbi:SQLite:myapp.db </connect_info> </Model::MyDB>
使用单独的数据库时也要检查this