如何从外部文件处理 Sinatra 中的错误?
How to handle errors in Sinatra from external file?
我正在尝试处理包含帮助程序模块的 Sinatra 应用程序中的错误。我试过这样做:
# application_controller.rb
require './application_helper'
class ApplicationController < Sinatra::Base
helpers Sinatra::ApplicationHelper
end
# application_helper.rb
require 'sinatra/base'
module Sinatra
module ApplicationHelper
error StandardError do |e|
handle_error 500, e
end
end
helpers ApplicationHelper
end
但我无法让它工作,它引发了错误:
NoMethodError:
undefined method `error' for Sinatra::ApplicationHelper:Module
如何在外部模块中使用 error
?
您需要在辅助模块上使用 define a registered method
,而不是使用 helpers
方法。在这个方法中传递的参数是你的应用程序,你可以用它来配置错误,例如:
module Sinatra
module ApplicationHelper
def self.registered(app)
app.error StandardError do |e|
handle_error 500, e
end
end
end
register ApplicationHelper
end
然后在您的应用程序文件中使用 register
而不是 helpers
:
class ApplicationController < Sinatra::Base
register Sinatra::ApplicationHelper
end
您可能希望在注册扩展的同时添加一些助手,例如,在这种情况下,您可能希望在扩展中包含 handle_error
方法。为此,您可以在扩展模块中添加另一个辅助模块,并调用 app.helpers
将其包含在 registered
.
中
module Sinatra
module ApplicationHelper
module Helpers
def handle_error(code, error)
#... Helper code here.
end
# Other helpers if needed.
end
def self.registered(app)
app.error StandardError do |e|
handle_error 500, e
end
# Include helpers at registration.
app.helpers Helpers
end
end
register ApplicationHelper
end
我正在尝试处理包含帮助程序模块的 Sinatra 应用程序中的错误。我试过这样做:
# application_controller.rb
require './application_helper'
class ApplicationController < Sinatra::Base
helpers Sinatra::ApplicationHelper
end
# application_helper.rb
require 'sinatra/base'
module Sinatra
module ApplicationHelper
error StandardError do |e|
handle_error 500, e
end
end
helpers ApplicationHelper
end
但我无法让它工作,它引发了错误:
NoMethodError:
undefined method `error' for Sinatra::ApplicationHelper:Module
如何在外部模块中使用 error
?
您需要在辅助模块上使用 define a registered method
,而不是使用 helpers
方法。在这个方法中传递的参数是你的应用程序,你可以用它来配置错误,例如:
module Sinatra
module ApplicationHelper
def self.registered(app)
app.error StandardError do |e|
handle_error 500, e
end
end
end
register ApplicationHelper
end
然后在您的应用程序文件中使用 register
而不是 helpers
:
class ApplicationController < Sinatra::Base
register Sinatra::ApplicationHelper
end
您可能希望在注册扩展的同时添加一些助手,例如,在这种情况下,您可能希望在扩展中包含 handle_error
方法。为此,您可以在扩展模块中添加另一个辅助模块,并调用 app.helpers
将其包含在 registered
.
module Sinatra
module ApplicationHelper
module Helpers
def handle_error(code, error)
#... Helper code here.
end
# Other helpers if needed.
end
def self.registered(app)
app.error StandardError do |e|
handle_error 500, e
end
# Include helpers at registration.
app.helpers Helpers
end
end
register ApplicationHelper
end