You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by Boysenberry Payne <bo...@habitatlife.com> on 2010/01/24 04:24:14 UTC

Getting DBI working during the server life cycle

Hello,

I'm trying to connect to my postgresql database using the DBI -> Apache::CBI -> DBD::Pg combination of modules.
I'm having trouble understanding Apache::DBI usage as it pertains to https pre request server life cycle, in particular during the OpenLogs stage.
My trouble comes from an error I'm getting from DBI:

Global $r object is not available. Set:
	PerlOptions +GlobalRequest
in httpd.conf at /usr/local/lib/perl5/site_perl/5.10.1/Apache/DBI.pm line 144.

So, obviously, the Apache::RequestRec object hasn't been globalized because it's before the request stage (the child processes haven't even been forked yet.)
If I use DBI in my startup.pl file first, no problems, but Apache::DBI says to have it load before DBI to use the persistent connections it offers, thus my dilemma.

So, what do I do?

-bop


Re: Getting DBI working during the server life cycle

Posted by Boysenberry Payne <bo...@habitatlife.com>.
I wasn't sure how to do the path mentioned in the link so I just manually edited the Apache::DBI file and added the eval around the line requesting Apache2::RequestRec and it seems to work now.
Thanks for the heads up.  All of the literature I have mentions Apache::DBI for use with mod_perl.
I did look at DBI::Class as the Apache::DBI author mentioned, but I would rather use Apache::DBI and do the class structure myself.

Seems like an easy enough thing to patch into Apache::DBI to avoid these head aches, wonder why the author isn't?

Thanks again,
Boysenberry Payne

On Jan 23, 2010, at 9:34 PM, Adam Prime wrote:

> Boysenberry Payne wrote:
>> Hello,
>> I'm trying to connect to my postgresql database using the DBI -> Apache::CBI -> DBD::Pg combination of modules.
>> I'm having trouble understanding Apache::DBI usage as it pertains to https pre request server life cycle, in particular during the OpenLogs stage.
>> My trouble comes from an error I'm getting from DBI:
>> Global $r object is not available. Set:
>> 	PerlOptions +GlobalRequest
>> in httpd.conf at /usr/local/lib/perl5/site_perl/5.10.1/Apache/DBI.pm line 144.
>> So, obviously, the Apache::RequestRec object hasn't been globalized because it's before the request stage (the child processes haven't even been forked yet.)
>> If I use DBI in my startup.pl file first, no problems, but Apache::DBI says to have it load before DBI to use the persistent connections it offers, thus my dilemma.
>> So, what do I do?
> 
> Don't use Apache::DBI 1.07 and try to do this, because as you've discovered, it's broken.
> 
> see: http://rt.cpan.org/Public/Bug/Display.html?id=36346
> 
> Adam
> 
> 


Re: Getting DBI working during the server life cycle

Posted by Adam Prime <ad...@utoronto.ca>.
Boysenberry Payne wrote:
> Hello,
> 
> I'm trying to connect to my postgresql database using the DBI -> Apache::CBI -> DBD::Pg combination of modules.
> I'm having trouble understanding Apache::DBI usage as it pertains to https pre request server life cycle, in particular during the OpenLogs stage.
> My trouble comes from an error I'm getting from DBI:
> 
> Global $r object is not available. Set:
> 	PerlOptions +GlobalRequest
> in httpd.conf at /usr/local/lib/perl5/site_perl/5.10.1/Apache/DBI.pm line 144.
> 
> So, obviously, the Apache::RequestRec object hasn't been globalized because it's before the request stage (the child processes haven't even been forked yet.)
> If I use DBI in my startup.pl file first, no problems, but Apache::DBI says to have it load before DBI to use the persistent connections it offers, thus my dilemma.
> 
> So, what do I do?

Don't use Apache::DBI 1.07 and try to do this, because as you've 
discovered, it's broken.

see: http://rt.cpan.org/Public/Bug/Display.html?id=36346

Adam