一个Plack应用程序如何影响另一个应用程序?

| 我有这个:
use Plack::Builder;
my $config_app = sub {...};
my $app = sub {...}

builder {
    mount \"/admin\" => $config_app;
    mount \"/\"   => $app;
};
$config_app
将配置值保存到
app.cfg
文件中,the3ѭ将其作为配置文件加载。不需要在每个请求中读取配置文件。需要在应用程序开始时阅读它,并在更改时重新阅读。 做到这一点的最佳方法是什么? 我唯一的想法是:该应用程序将记住上一个config_read_time,并且在每个请求中都会检查
app.cfg
的修改时间。如果文件被修改,将重新读取它。 这里有更好的解决方案吗? (表示$ config_app和$ app之间的一些消息传递,例如$ config_app保存新配置
will send some message to $app: re-read the config
时。     
已邀请:
有很多方法可以监视配置文件。 编写这样的配置检查例程:
use constant MIN_CHECK_DELAY => 5;  #SECONDS
use constant CONFIG_FILE => \'/etc/wtf.conf\';

{
    my $last_changed = 0;
    my $last_check   = 0;

    sub load_config {

        return if $last_check + MIN_CHECK_DELAY <= time;

        return if (stat(CONFIG_FILE))[9] <= $last_check;

        # Do stuff here.

        return;
    }

}
您需要注意的主要事情是,您不会在文件更改的那一遍又一遍地重新加载。 现在,在可能需要加载新一轮配置的任何地方调用`load_config()。由于它总是成功,因此您无需进行测试或做任何比将其撒在方便的地方更聪明的事情。就像您的应用处理程序顶部一样。 这对于执行诸如打开正在运行的进程中的日志记录或强制重新加载某些模块之类的工作非常有用。缩放不会咬你的用途不多。 您知道,如果有一堆机器可以提供服务,则无法扩展。您将不得不重新同步文件更改后的文件,或者更糟的是将它们放在NFS挂载中。 这是一个基本概念:为什么不使用数据库? 我听说这些天很酷的孩子们正在尝试基于数据库的Web应用程序,并且它们确实运行良好。 认真地说,编程和构建系统的有趣之处在于在设计权衡之间做出选择。在某些情况下,传递经过更改的文件是非常成功的,并且显示我的过时数据库注释非常愚蠢。不确定用例是什么,但可能存在。您知道您的用例。尝试一下。不要害怕有点愚蠢。有时,看起来很愚蠢的解决方案却显得异常优雅。但是,如果想法只是愚蠢的,请从经验中学习并继续前进。     
尽管在
$config_app
中调用
$app
(有点像内部重定向)并非不可能,但我个人还是建议不要这样做。 如果创建一个单独的老式Perl类(MyApp :: ConfigFile或其他任何类)并针对单个对象从
$app
$config_app
调用方法,则应该容易得多。请注意,无论如何,该技术仅适用于单进程Web服务器环境。如果您检查修改时间并重新读取,则可以在Starman Web服务器等分支环境中使用。     

要回复问题请先登录注册