[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