On Tue, Jun 17, 2008 at 2:31 PM, Mitchell K. Jackson
<[EMAIL PROTECTED]> wrote:
> Good afternoon,
>
> Is there a graceful way for a catalyst app to handle when the database
> server goes away? If this happens while a process is holding open a
> database connection it's already been using, there's not even a
> database error to the log. The only error is "read data timeout in 40
> seconds", and an error 500 to the web browser.
>
> I would like my app to be able to deliver a more useful error to the
> end user, such as "Lost database connection." If I can retain control
> of the app in this event, I'll have it send me an sms for good
> measure. Any ideas how I could go about this?
>
> Regards,
>
> /Mitchell K. Jackson
>
That's really up to the model you are using. Catalyst doesn't handle
databases :)
If you are using DBIx::Class, I'd be surprised if it doesn't do the
right thing already.
As far as catching the error, make sure that your model throws a
proper exception and you can catch that in the end action.
Something like this is what I tend to use:
sub render_end : Private ActionClass('RenderView') { }
sub end : Private {
my ( $self, $c ) = @_;
$c->forward('render_end');
if ( @{$c->error} ) {
# Handle errors
}
}
In our apps, if we're not running under debug I bake an email and send
it off to Catalyst::View::Email. I then will set
$c->stash->{template} to something like 'errors/500.tt' and then
re-call the forward to render_end.
-J
_______________________________________________
List: [email protected]
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/