我正在设置要部署的Catalyst Web应用程序,并希望从生产环境中删除-Debug
和StackTrace
Catalyst插件app.pm
。但是,由于我保留了测试环境,因此我想避免对此进行“硬编码”。相反,我想有一个定义环境的配置变量并相应地加载模块。所有源都在SVN上,如果我要更新存储库然后手动更改我在app.pm中加载的模块,它将变得混乱。
该应用程序当前使用configLoader
模块读取local_app.yml
具有所有配置的文件,该文件是未版本控制的,并允许对应用程序在开发,测试或生产环境中的工作方式进行一些控制;但是只有在启动应用程序之后(因此,在加载模块之后)才能读取这些内容。
这是的简化app.pm
:
package app;
use strict;
use warnings;
use Hash::Merge ();
use Sys::Hostname;
use Catalyst::Runtime '5.80';
use Catalyst qw/
-Debug
StackTrace
ConfigLoader
SomeOtherModule
AndYetAnotherOne
/;
__PACKAGE__->config(
# Some local config stuff
);
# Start the application
__PACKAGE__->setup();
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以不必使用Unix命令来找出正在运行该应用程序的主机?
控制运行方式的一种方法是通过环境。从催化剂
-调试
启用调试输出。您也可以使用CATALYST_DEBUG或_DEBUG从系统环境中强制执行此设置。环境设置将覆盖应用程序,其中_DEBUG具有最高优先级。
然后,您可以通过驱动程序进行设置,以便能够首先设置环境变量,而默认情况下将其禁用以进行生产运行。这应该可以根据需要实现自动化。然后StackTrace插件也开始效仿
默认情况下,此插件仅在-Debug模式下处于活动状态,[...]
因此环境变量可以兼顾两者。
另一个选择是先列出ConfigLoader插件,如其文档在摘要中所述
Run Code Online (Sandbox Code Playgroud)package MyApp; # ConfigLoader should be first in your list so # other plugins can get the config information use Catalyst qw( ConfigLoader ... );
然后,您应该能够分别控制StackTrace
插件和-Debug
模式与否。