[cgiapp] is my app caching db connection ?
Mark Rajcok
mrajcok at gmail.com
Sun Nov 22 17:06:14 EST 2009
Thanks to the archives I found this thread related to persistent DB
connections when using CAP::DBH and FastCGI. I changed my cgiapp_init()
code from:
$self->dbh_config(
$self->config_param('dsn'),$self->config_param('user'),$self->config_param('password')
,{PrintError => 0, RaiseError => 0}
);
to:
$self->dbh_config(sub { DBI->connect_cached(
$self->config_param('dsn'),$self->config_param('user'),$self->config_param('password')
,{PrintError => 0, RaiseError => 0}
); });
and I now get persistent DB connections. Very nice.
However, I would prefer if CAP:DBH did this automatically. If I leave my
cgiapp_init() code as it was originally, and instead change DBH to use
connect_cached() instead of connect(), I also get persistent DB
connections. In addition to FastCGI, connect_cached() works with plain CGI
and (according to the DBI documentation) with Apache::DBI.
Are there any reasons DBH should not be using connect_cached()?
BTW, I have a unit test script that uses Test::WWW::Mechanize to test my
CGI::App application and when I moved over to FastCGI, it ran 11 times
faster -- 12 seconds instead of 130. I should have started to use FastCGI a
long time ago...
The CA wiki is still not editable. Is anyone looking into fixing it?
On Mon, Jul 28, 2008 at 1:53 PM, Dan Horne <dan.horne at redbone.co.nz> wrote:
>
> I believe the way around this is to use the package variable approach Mark
> suggests with a C::A::P::DBH callback. DBI's connect_cached option, is
> designed to handle the stale connection problem (I use DBI directly, but the
> principle is the same):
>
> # Use a callback to create your own handle that is still lazy loaded
> $self->dbh_config(sub { DBI->connect_cached(); });
More information about the cgiapp
mailing list