Puma has a neat little method you can call to override the behavior when it encounters an error in the Rack application it's running. If you've ever been running a Ruby application on Puma and seen the "call your local MayTag repairman" error message then you've hit the low-level error handler and know how jarring that can be. While it looks like the folks at Puma have since updated the default message to be more meaningful, I still wanted something more customer-friendly for our sites at Engage so I overwrote the low-level error handler like so:
# Inside of your Puma configuration file.
lowlevel_error_handler do
[500, { 'Content-Type' => 'text/html' }, File.open('50x.html')]
end
And added a little more helpful HTML page with it:
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="refresh" content="5" />
<title>Temporarily Unavailable</title>
<link
rel="stylesheet"
type="text/css"
href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.min.css"
/>
</head>
<body>
<div class="container">
<div class="col-sm-offset-3 col-sm-6 text-center">
<br />
<br />
<h1>Temporarily Unavailable</h1>
<br />
<div class="well">
<p>We're sorry, we're experiencing a little trouble.</p>
<p>
We will be back shortly, but if you continue to see this error
please
<a href="mailto:[email protected]"
>contact customer service</a
>.
</p>
<hr />
<p>
Feel free to realod this page or
<a href="/">head back to the homepage</a>.
</p>
</div>
</div>
</div>
</body>
</html>
Super simple, right?