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/

Reply via email to