簡體   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