[Catalyst] Graceful handling of database failure

mike pulsation at gmail.com
Wed Jul 16 18:57:58 BST 2008


On Tue, Jun 17, 2008 at 5:27 PM, J. Shirley <jshirley at gmail.com> wrote:
> On Tue, Jun 17, 2008 at 2:31 PM, Mitchell K. Jackson
> <mitchell.k.jackson at gmail.com> 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:

[snip]

are you using Catalyst::Plugin::Session::Store::DBIC like he is?  we're
using code identical to what you suggested, but it doesn't work for
exceptions generated in finalize_headers.

try it.  take your database down and start the application.

any suggestions?

-mike



More information about the Catalyst mailing list