繁体   English   中英

如何在CGI :: Application中使用mod_perl持久化DBIx :: Class?

[英]How do I have a persistent DBIx::Class in CGI::Application with mod_perl?

我正在使用带有DBIx :: Class的mod_perl上的CGI :: Application,我想在实例化时使用new定义一个新的dbic架构。 到目前为止,我还没能让它发挥作用。 我最接近的是一个超类,它有一个返回一个新对象的connect()方法,但我宁愿它已经连接并实例化了。

我真的很感激任何想法。

谢谢!

注意 :好的,显然没有任何帮助,但是,与此同时我创建了一个懒惰实例化DBIx :: Class的访问器,所以这可能会更好一些。 核实:

sub schema {
    my $self = shift;
    unless ($self->{schema}) {
        $self->{schema} = ACD::Model->connect(@{$self->cfg->{$ENV{MODE}}->{connect_params}});
    }
    return $self->{schema};
}

然后当然要使用它你会做类似的事情:

$self->schema->resultset('Foo')->find(1234);

当然,您无法将数据库连接序列化为会话文件或其他任何内容,并且您无法在apache forks之前创建它,但您可以为每个子进程保留一个实时进程。

提前创建它的选项是在你的基础mod_perl处理程序子中执行它,但由于客户端连接已经在那时开始,它不会为你带来任何响应时间改进。

所以我会像上面一样做一个懒惰的实现,但不是在$self中缓存模式对象,而是将它缓存在一个包级别的私有变量中,这意味着每个apache子进程只有一个模式连接:

my $_schema;

sub schema {
    return $_schema
        if $_schema; # actually, you should check the db connection is live

    return $_schema = ACD::Model->connect(...);
}

我没有一个答案,但http://lists.scsys.co.uk/pipermail/dbix-class/2006-June/001690.html可能值得阅读,因此您了解DBIC如何管理连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM