document.write('<link rel="stylesheet" href="http://flowcoder.com/stylesheets/pygment_trac.css" />');
document.write('<link rel="stylesheet" href="http://flowcoder.com/stylesheets/embed.css" />');
document.write('<div class="flowcoder_post flowcoder_clearfix">');
document.write('<div class="flowcoder_posttitle"><a href=\"http://flowcoder.com/91\">User-friendly exception page Rack middleware<\/a></div>');
document.write('<div class="flowcoder_postbody flowcoder_syntax"><div class=\"highlight\"><pre><span class=\"k\">module<\/span> <span class=\"nn\">Rack<\/span>\n  <span class=\"c1\"># Returns a user-friendly exception page.<\/span>\n  <span class=\"c1\"># Should be included at the very top of the middleware pipeline so that unhandled <\/span>\n  <span class=\"c1\"># exceptions from anywhere down the pipeline are rescued.<\/span>\n  <span class=\"c1\"># In development, you&#39;d want to use the developer-friendly Rack::ShowExceptions instead. <\/span>\n  <span class=\"c1\"># <\/span>\n  <span class=\"c1\"># config.ru example:<\/span>\n  <span class=\"c1\">#<\/span>\n  <span class=\"c1\">#   if ENV[&#39;RACK_ENV&#39;] == &#39;development&#39;<\/span>\n  <span class=\"c1\">#     use Rack::ShowExceptions<\/span>\n  <span class=\"c1\">#   else<\/span>\n  <span class=\"c1\">#     use Rack::PublicExceptionPage<\/span>\n  <span class=\"c1\">#   end<\/span>\n  <span class=\"c1\">#<\/span>\n  <span class=\"c1\"># The default HTML included here is a copy of the 500 page included with Rails<\/span>\n  <span class=\"c1\"># You can optionally specify your own file, ex:<\/span>\n  <span class=\"c1\">#<\/span>\n  <span class=\"c1\">#   use Rack::PublicExceptionPage, &quot;public/500.html&quot;<\/span>\n  <span class=\"k\">class<\/span> <span class=\"nc\">PublicExceptionPage<\/span>\n\n    <span class=\"k\">def<\/span> <span class=\"nf\">initialize<\/span><span class=\"p\">(<\/span><span class=\"n\">app<\/span><span class=\"p\">,<\/span> <span class=\"n\">file_path<\/span> <span class=\"o\">=<\/span> <span class=\"kp\">nil<\/span><span class=\"p\">)<\/span>\n      <span class=\"vi\">@app<\/span> <span class=\"o\">=<\/span> <span class=\"n\">app<\/span>\n      <span class=\"vi\">@file_path<\/span> <span class=\"o\">=<\/span> <span class=\"n\">file_path<\/span>\n    <span class=\"k\">end<\/span>\n\n    <span class=\"k\">def<\/span> <span class=\"nf\">call<\/span><span class=\"p\">(<\/span><span class=\"n\">env<\/span><span class=\"p\">)<\/span>\n      <span class=\"vi\">@app<\/span><span class=\"o\">.<\/span><span class=\"n\">call<\/span><span class=\"p\">(<\/span><span class=\"n\">env<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">rescue<\/span> <span class=\"o\">::<\/span><span class=\"no\">Exception<\/span>\n      <span class=\"o\">[<\/span><span class=\"mi\">500<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span><span class=\"s1\">&#39;Content-Type&#39;<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">&#39;text/html&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;Content-Length&#39;<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"n\">html<\/span><span class=\"o\">.<\/span><span class=\"n\">length<\/span><span class=\"o\">.<\/span><span class=\"n\">to_s<\/span><span class=\"p\">},<\/span> <span class=\"o\">[<\/span><span class=\"n\">html<\/span><span class=\"o\">]]<\/span>\n    <span class=\"k\">end<\/span>\n\n    <span class=\"kp\">private<\/span>\n\n      <span class=\"k\">def<\/span> <span class=\"nf\">html<\/span>\n        <span class=\"vi\">@html<\/span> <span class=\"o\">||=<\/span> <span class=\"vi\">@file_path<\/span> <span class=\"p\">?<\/span> <span class=\"o\">::<\/span><span class=\"no\">File<\/span><span class=\"o\">.<\/span><span class=\"n\">read<\/span><span class=\"p\">(<\/span><span class=\"vi\">@file_path<\/span><span class=\"p\">)<\/span> <span class=\"p\">:<\/span> <span class=\"n\">default_html<\/span>\n      <span class=\"k\">end<\/span>\n\n      <span class=\"c1\"># Exception page from Rails (500.html)<\/span>\n      <span class=\"k\">def<\/span> <span class=\"nf\">default_html<\/span>\n        <span class=\"o\">&lt;&lt;-<\/span><span class=\"no\">EOV<\/span>\n<span class=\"sh\">        &lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;<\/span>\n<span class=\"sh\">               &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;<\/span>\n\n<span class=\"sh\">        &lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;<\/span>\n\n<span class=\"sh\">        &lt;head&gt;<\/span>\n<span class=\"sh\">          &lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;<\/span>\n<span class=\"sh\">          &lt;title&gt;We&#39;re sorry, but something went wrong (500)&lt;/title&gt;<\/span>\n<span class=\"sh\">        	&lt;style type=&quot;text/css&quot;&gt;<\/span>\n<span class=\"sh\">        		body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }<\/span>\n<span class=\"sh\">        		div.dialog {<\/span>\n<span class=\"sh\">        			width: 25em;<\/span>\n<span class=\"sh\">        			padding: 0 4em;<\/span>\n<span class=\"sh\">        			margin: 4em auto 0 auto;<\/span>\n<span class=\"sh\">        			border: 1px solid #ccc;<\/span>\n<span class=\"sh\">        			border-right-color: #999;<\/span>\n<span class=\"sh\">        			border-bottom-color: #999;<\/span>\n<span class=\"sh\">        		}<\/span>\n<span class=\"sh\">        		h1 { font-size: 100%; color: #f00; line-height: 1.5em; }<\/span>\n<span class=\"sh\">        	&lt;/style&gt;<\/span>\n<span class=\"sh\">        &lt;/head&gt;<\/span>\n\n<span class=\"sh\">        &lt;body&gt;<\/span>\n<span class=\"sh\">          &lt;!-- This file lives in public/500.html --&gt;<\/span>\n<span class=\"sh\">          &lt;div class=&quot;dialog&quot;&gt;<\/span>\n<span class=\"sh\">            &lt;h1&gt;We&#39;re sorry, but something went wrong.&lt;/h1&gt;<\/span>\n<span class=\"sh\">            &lt;p&gt;We&#39;ve been notified about this issue and we&#39;ll take a look at it shortly.&lt;/p&gt;<\/span>\n<span class=\"sh\">          &lt;/div&gt;<\/span>\n<span class=\"sh\">        &lt;/body&gt;<\/span>\n<span class=\"sh\">        &lt;/html&gt;<\/span>\n<span class=\"no\">        EOV<\/span>\n      <span class=\"k\">end<\/span>\n\n  <span class=\"k\">end<\/span>\n<span class=\"k\">end<\/span>\n<\/pre><\/div>\n</div>');
document.write('<div class="flowcoder_bottombar flowcoder_clearfix">');
document.write('<div class="flowcoder_postedby">Posted by <a href=\"http://flowcoder.com/gbuesing\">gbuesing<\/a> on <a href=\"http://flowcoder.com/\">Flowcoder<\/a></div>');
document.write('<div class="flowcoder_viewraw"><a href=\"http://flowcoder.com/91.txt\">view raw<\/a></div>');
document.write('</div></div>');
