[dancer-users] Dancer app in production on Starman : Dancer::Plugin::Database Child process cannot use database handle created in parent

David Precious davidp at preshweb.co.uk
Tue Feb 11 10:33:50 GMT 2014


On Tue, 11 Feb 2014 00:29:24 +0100
Anthony Milan <anthony.milan at laposte.net> wrote:

> Le 10/02/2014 23:29, Scott Penrose a écrit :
> > Without any actual internal knowledge, my one guess would be
> > forking.
> 
> Yes.
> 
> > If you make a database connection into a variable (e.g. database,
> > or $dbh) then you fork, then you can no longer access that
> > connection.
[...]
> > Now it should all be handled, but maybe it isn’t?
> 
> Ok. I changed from:
> 
> use Dancer::Plugin::Database;
> my $dbh = database('db1');
> 
> to
> 
> get '/something/:id' => sub {
> my $dbh = database('db1');
> 
> }

Bingo.

Dancer::Plugin::Database caches the handles it gives you, so you can
call database() repeatedly and get the same handle back, but takes care
that the handles it will give you from the cache are the ones for the
current process ID / thread - so if you've forked, it won't
accidentally give you one from the parent.  If you've got one before a
fork and hung on to it yourself, though, it can't help you there :)



-- 
David Precious ("bigpresh") <davidp at preshweb.co.uk>
http://www.preshweb.co.uk/     www.preshweb.co.uk/twitter
www.preshweb.co.uk/linkedin    www.preshweb.co.uk/facebook
www.preshweb.co.uk/cpan        www.preshweb.co.uk/github




More information about the dancer-users mailing list