Как у меня есть постоянный DBIx::Class в CGI::Application с mod_perl?

Я использую CGI::Application в mod_perl с DBIx::Class, и я хотел бы, чтобы что-то вроде 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);

2 ответа

Конечно, вы не можете сериализовать соединение с базой данных в файл сеанса или что-то в этом роде, и вы не можете создать его до того, как Apache разветвится, но вы можете сохранить один живой процесс на дочерний процесс.

Вариант для его создания заранее - это сделать это в вашем базовом подпрограмме обработчика 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 управляет соединениями.

Другие вопросы по тегам