我试图让我的sinatra应用程序在服务器上发生错误(例如IOError或ArgumentError)时显示自定义错误页面。Sinatra - 错误处理
目前我正在使用AJAX将结果加载到某个#results
div,但如果在服务器出现错误时,我想要在新页面上打开错误页面。
当前,IOError显示在服务器上,并且在控制台中显示错误(服务器响应的状态为500(内部服务器错误))。除此之外,没有任何反应。
我认为我必须玩Javascript(以及Sinatra :: Base类),但我已经花了整个昨天和今天早上没有得到任何地方。
我会很感激任何帮助。我创建我的应用程序过于简单的版本,我在下面显示...
Sinatra_app.rb
require 'sinatra/base'
require9 'sinatra'
require 'slim'
# A helper module
module GVhelpers
def create_results(name)
# raise IOError, "There's a problem..."
return "<p>The Server Says 'Hey #{name}'</p>"
end
end
class GVapp < Sinatra::Base
helpers GVhelpers
set :root, File.dirname(__FILE__)
error do
@error = env['sinatra.error']
slim :"500", :locals => {:error => error}
end
get '/' do
slim :index
end
post '/form' do
name = params[:personName]
create_results(name)
end
end
GVapp.run!
index.slim(在视图中的文件夹)
script src="/jquery.min.js"
script src="/Gvapp.js"
form#sayHey action="/form" method="post"
| Name:
input type="text" name="personName"
br
input type="submit"
#output
500.slim(在视图文件夹中)
h1 Oops! Something went Wonky!
p Apologies, there was an error with your request:
strong request.env['sinatra.error'].message
p If the error persists, please contact the administrator.
Gvapp.js(公共文件夹)
$(document).ready(function() {
$('#sayHey').submit(function(e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: '/form',
data: $('#sayHey').serialize(),
success: function(response){
$('#output').html(response);
}
})
})
})
我也不得不添加一个错误块到ajax来捕捉错误,但是非常感谢,真的有帮助... – 2014-10-07 16:01:39
'dump_errors'是另一个有用的,它将打印跟踪到STDERR – 2017-08-18 21:06:58