在Perl Catalyst应用程序上的配置变量上加载模块

问题描述 投票:2回答:1

我正在设置要部署的Catalyst Web应用程序,并希望在生产环境中从我的-Debug中删除StackTraceapp.pm Catalyst插件。但是,由于我保留了测试环境,因此我想避免对此进行“硬编码”。相反,我想有一个定义环境的配置变量并相应地加载模块。所有源都在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();

有没有一种方法,而不必使用Unix命令来找出哪个主机正在运行该应用程序?

perl catalyst
1个回答
0
投票

控制运行方式的一种方法是通过环境。来自Catalyst

-Debug

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

然后您可以通过例如驱动程序进行设置,以便能够首先设置环境变量,而在默认情况下将其禁用以进行生产运行。这应该可以根据需要实现自动化。然后,StackTrace plugin也效仿,因为

此插件默认仅在-Debug模式下处于活动状态,[...]

因此环境变量应同时照顾这两个。

另一个选项应该是首先列出ConfigLoader插件,如其文档在摘要中所述

package MyApp;

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

然后,您应该能够分别控制StackTrace插件的行为和-Debug模式或非模式。

© www.soinside.com 2019 - 2024. All rights reserved.