ERB.new(" <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n <html lang=\"en\">\n <head>\n <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n <meta name=\"robots\" content=\"NONE,NOARCHIVE\" />\n <title><%=h exception.class %> at <%=h path %></title>\n <style type=\"text/css\">\n html * { padding:0; margin:0; }\n body * { padding:10px 20px; }\n body * * { padding:0; }\n body { font:small sans-serif; }\n body>div { border-bottom:1px solid #ddd; }\n h1 { font-weight:normal; }\n h2 { margin-bottom:.8em; }\n h2 span { font-size:80%; color:#666; font-weight:normal; }\n h3 { margin:1em 0 .5em 0; }\n h4 { margin:0 0 .5em 0; font-weight: normal; }\n table {\n border:1px solid #ccc; border-collapse: collapse; background:white; }\n tbody td, tbody th { vertical-align:top; padding:2px 3px; }\n thead th {\n padding:1px 6px 1px 3px; background:#fefefe; text-align:left;\n font-weight:normal; font-size:11px; border:1px solid #ddd; }\n tbody th { text-align:right; color:#666; padding-right:.5em; }\n table.vars { margin:5px 0 2px 40px; }\n table.vars td, table.req td { font-family:monospace; }\n table td.code { width:100%;}\n table td.code div { overflow:hidden; }\n table.source th { color:#666; }\n table.source td {\n font-family:monospace; white-space:pre; border-bottom:1px solid #eee; }\n ul.traceback { list-style-type:none; }\n ul.traceback li.frame { margin-bottom:1em; }\n div.context { margin: 10px 0; }\n div.context ol {\n padding-left:30px; margin:0 10px; list-style-position: inside; }\n div.context ol li {\n font-family:monospace; white-space:pre; color:#666; cursor:pointer; }\n div.context ol.context-line li { color:black; background-color:#ccc; }\n div.context ol.context-line li span { float: right; }\n div.commands { margin-left: 40px; }\n div.commands a { color:black; text-decoration:none; }\n #summary { background: #ffc; }\n #summary h2 { font-weight: normal; color: #666; }\n #summary ul#quicklinks { list-style-type: none; margin-bottom: 2em; }\n #summary ul#quicklinks li { float: left; padding: 0 1em; }\n #summary ul#quicklinks>li+li { border-left: 1px #666 solid; }\n #explanation { background:#eee; }\n #template, #template-not-exist { background:#f6f6f6; }\n #template-not-exist ul { margin: 0 0 0 20px; }\n #traceback { background:#eee; }\n #requestinfo { background:#f6f6f6; padding-left:120px; }\n #summary table { border:none; background:transparent; }\n #requestinfo h2, #requestinfo h3 { position:relative; margin-left:-100px; }\n #requestinfo h3 { margin-bottom:-1em; }\n .error { background: #ffc; }\n .specific { color:#cc3300; font-weight:bold; }\n </style>\n <script type=\"text/javascript\">\n //<!--\n function getElementsByClassName(oElm, strTagName, strClassName){\n // Written by Jonathan Snook, http://www.snook.ca/jon;\n // Add-ons by Robert Nyman, http://www.robertnyman.com\n var arrElements = (strTagName == \"*\" && document.all)? document.all :\n oElm.getElementsByTagName(strTagName);\n var arrReturnElements = new Array();\n strClassName = strClassName.replace(/\\-/g, \"\\\\-\");\n var oRegExp = new RegExp(\"(^|\\\\s)\" + strClassName + \"(\\\\s|$$)\");\n var oElement;\n for(var i=0; i<arrElements.length; i++){\n oElement = arrElements[i];\n if(oRegExp.test(oElement.className)){\n arrReturnElements.push(oElement);\n }\n }\n return (arrReturnElements)\n }\n function hideAll(elems) {\n for (var e = 0; e < elems.length; e++) {\n elems[e].style.display = 'none';\n }\n }\n window.onload = function() {\n hideAll(getElementsByClassName(document, 'table', 'vars'));\n hideAll(getElementsByClassName(document, 'ol', 'pre-context'));\n hideAll(getElementsByClassName(document, 'ol', 'post-context'));\n }\n function toggle() {\n for (var i = 0; i < arguments.length; i++) {\n var e = document.getElementById(arguments[i]);\n if (e) {\n e.style.display = e.style.display == 'none' ? 'block' : 'none';\n }\n }\n return false;\n }\n function varToggle(link, id) {\n toggle('v' + id);\n var s = link.getElementsByTagName('span')[0];\n var uarr = String.fromCharCode(0x25b6);\n var darr = String.fromCharCode(0x25bc);\n s.innerHTML = s.innerHTML == uarr ? darr : uarr;\n return false;\n }\n //-->\n </script>\n </head>\n <body>\n\n <div id=\"summary\">\n <h1><%=h exception.class %> at <%=h path %></h1>\n <h2><%=h exception.message %></h2>\n <table><tr>\n <th>Ruby</th>\n <td>\n <% if first = frames.first %>\n <code><%=h first.filename %></code>: in <code><%=h first.function %></code>, line <%=h frames.first.lineno %>\n <% else %>\n unknown location\n <% end %>\n </td>\n </tr><tr>\n <th>Web</th>\n <td><code><%=h req.request_method %> <%=h(req.host + path)%></code></td>\n </tr></table>\n\n <h3>Jump to:</h3>\n <ul id=\"quicklinks\">\n <li><a href=\"#get-info\">GET</a></li>\n <li><a href=\"#post-info\">POST</a></li>\n <li><a href=\"#cookie-info\">Cookies</a></li>\n <li><a href=\"#env-info\">ENV</a></li>\n </ul>\n </div>\n\n <div id=\"traceback\">\n <h2>Traceback <span>(innermost first)</span></h2>\n <ul class=\"traceback\">\n <% frames.each { |frame| %>\n <li class=\"frame\">\n <code><%=h frame.filename %></code>: in <code><%=h frame.function %></code>\n\n <% if frame.context_line %>\n <div class=\"context\" id=\"c<%=h frame.object_id %>\">\n <% if frame.pre_context %>\n <ol start=\"<%=h frame.pre_context_lineno+1 %>\" class=\"pre-context\" id=\"pre<%=h frame.object_id %>\">\n <% frame.pre_context.each { |line| %>\n <li onclick=\"toggle('pre<%=h frame.object_id %>', 'post<%=h frame.object_id %>')\"><%=h line %></li>\n <% } %>\n </ol>\n <% end %>\n\n <ol start=\"<%=h frame.lineno %>\" class=\"context-line\">\n <li onclick=\"toggle('pre<%=h frame.object_id %>', 'post<%=h frame.object_id %>')\"><%=h frame.context_line %><span>...</span></li></ol>\n\n <% if frame.post_context %>\n <ol start='<%=h frame.lineno+1 %>' class=\"post-context\" id=\"post<%=h frame.object_id %>\">\n <% frame.post_context.each { |line| %>\n <li onclick=\"toggle('pre<%=h frame.object_id %>', 'post<%=h frame.object_id %>')\"><%=h line %></li>\n <% } %>\n </ol>\n <% end %>\n </div>\n <% end %>\n </li>\n <% } %>\n </ul>\n </div>\n\n <div id=\"requestinfo\">\n <h2>Request information</h2>\n\n <h3 id=\"get-info\">GET</h3>\n <% if req.GET and not req.GET.empty? %>\n <table class=\"req\">\n <thead>\n <tr>\n <th>Variable</th>\n <th>Value</th>\n </tr>\n </thead>\n <tbody>\n <% req.GET.sort_by { |k, v| k.to_s }.each { |key, val| %>\n <tr>\n <td><%=h key %></td>\n <td class=\"code\"><div><%=h val.inspect %></div></td>\n </tr>\n <% } %>\n </tbody>\n </table>\n <% else %>\n <p>No GET data.</p>\n <% end %>\n\n <h3 id=\"post-info\">POST</h3>\n <% if ((req.POST and not req.POST.empty?) rescue (no_post_data = \"Invalid POST data\"; nil)) %>\n <table class=\"req\">\n <thead>\n <tr>\n <th>Variable</th>\n <th>Value</th>\n </tr>\n </thead>\n <tbody>\n <% req.POST.sort_by { |k, v| k.to_s }.each { |key, val| %>\n <tr>\n <td><%=h key %></td>\n <td class=\"code\"><div><%=h val.inspect %></div></td>\n </tr>\n <% } %>\n </tbody>\n </table>\n <% else %>\n <p><%= no_post_data || \"No POST data\" %>.</p>\n <% end %>\n\n\n <h3 id=\"cookie-info\">COOKIES</h3>\n <% unless req.cookies.empty? %>\n <table class=\"req\">\n <thead>\n <tr>\n <th>Variable</th>\n <th>Value</th>\n </tr>\n </thead>\n <tbody>\n <% req.cookies.each { |key, val| %>\n <tr>\n <td><%=h key %></td>\n <td class=\"code\"><div><%=h val.inspect %></div></td>\n </tr>\n <% } %>\n </tbody>\n </table>\n <% else %>\n <p>No cookie data.</p>\n <% end %>\n\n <h3 id=\"env-info\">Rack ENV</h3>\n <table class=\"req\">\n <thead>\n <tr>\n <th>Variable</th>\n <th>Value</th>\n </tr>\n </thead>\n <tbody>\n <% env.sort_by { |k, v| k.to_s }.each { |key, val| %>\n <tr>\n <td><%=h key %></td>\n <td class=\"code\"><div><%=h val.inspect %></div></td>\n </tr>\n <% } %>\n </tbody>\n </table>\n\n </div>\n\n <div id=\"explanation\">\n <p>\n You're seeing this error because you use <code>Rack::ShowExceptions</code>.\n </p>\n </div>\n\n </body>\n </html>\n".gsub(/^ /, ''))