问题

我正在设置一个用于部署的Catalyst webapp,并希望从生产环境中的app.pm中删除-DebugStackTrace Catalyst插件.但是,由于我保持测试环境,我想避免“硬编码”这个.相反,我想有一个定义环境的配置变量并相应地加载模块.所有源都在SVN上,如果我手动更新repo,然后更改我在app.pm中加载的模块,它会变得混乱.

应用程序目前使用configLoader模块来读取具有所有配置的local_app.yml文件,该文件没有版本化,允许对应用程序在开发、测试或prod环境中的工作方式进行一些控制;但这些只在应用程序启动后才读取(因此,在加载模块之后).

这是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();

 

有没有办法做到这一点而不必使用Unix命令来找出哪个主机正在运行应用程序?

  最佳答案

控制这种运行方式的一种方法是通过环境.从 Catalyst

-debug

启用调试输出.还可以使用CATALYST_DEBUG或_DEBUG强制从系统环境中设置此设置.环境设置覆盖应用程序,具有最高优先级.

然后您可以通过驱动程序设置东西,以便能够首先设置环境变量,而默认情况下它会关闭生产运行.这应该可以根据需要自动化.然后 StackTrace插件遵循西装

此插件默认情况下只在-debug模式下活动,[...]

因此,环境变量可以兼顾两者。

另一个选项是首先列出 ConfigLoader 插件,如其文档在Synsions中所说

 package MyApp;

# ConfigLoader should be first in your list so
# other plugins can get the config information
use Catalyst qw( ConfigLoader ... );
 

然后您应该能够单独控制 StackTrace 插件和 -Debug 调制解调器-or-not。

  相同标签的其他问题

perlcatalyst