我怎样才能覆盖sinatra的get方法?

时间:2014-08-15 23:56:45

标签: logging sinatra metaprogramming

我希望能够覆盖Sinatra中的get方法,但正常的ruby覆盖不起作用,这是我的代码:

 require 'sinatra/base'
 class WebApp < Sinatra::Base
   def get
     format =  "url #{url} AT: #{Time.now}"
     puts format
     super
   end
   get "/" do
     puts "hi"
   end 
   run!
 end

我可以访问&#34; /&#34; ,它会打印&#34; hi&#34;,但它不会从log_request打印格式,如何正确覆盖get方法?

1 个答案:

答案 0 :(得分:2)

get方法将一个路由处理程序添加到Sinatra应用程序中;它仅用于在启动期间构建应用程序。当应用程序启动并运行时,传入的HTTP请求不再调用get,而是调用内部存储的proc。 (同样适用于post等。)

根据您的描述,您看起来想要一个before处理程序 - 在运行实际路径处理程序之前,将为每个传入的HTTP请求运行其内容。

因此,请尝试使用以下代码替换代码中的def get ... end块:

before do
  puts "URL: #{request.url}  AT: #{Time.now}"
end

然后,如果您只想将传入的请求记录到控制台,最简单的方法是在类定义中说enable :logging。在此处查看更多详细信息:http://www.sinatrarb.com/configuration.html