Rails版本:'〜> 4.2.7.1'
狂欢版:'3.1.1'
TlDr:
如何/api/products/:id
在Rails 4应用程序的中间件中获取该路由的路由或控制器和操作.
我在rails应用程序中添加了一个类似于gem scout_statsd_rack的中间件.这会将以下中间件添加到rails应用程序以通过statsd发送指标:
def call(env)
(status, headers, body), response_time = call_with_timing(env)
statsd.timing("#{env['REQUEST_PATH']}.response", response_time)
statsd.increment("#{env['REQUEST_PATH']}.response_codes.#{status.to_s.gsub(/\d{2}$/,'xx')}")
# Rack response
[status, headers, body]
rescue Exception => exception
statsd.increment("#{env['REQUEST_PATH']}.response_codes.5xx")
raise
end
def call_with_timing(env)
start = Time.now
result = @app.call(env)
[result, ((Time.now - start) * 1000).round]
end
Run Code Online (Sandbox Code Playgroud)
我想要的是在中间件中找到当前路由,以便我可以发送特定于每个路由的度量.
我尝试了这里描述的方法,它告诉我们env['PATH_INFO']
可以提供路径,但是它提供了这样的URL参数:/api/products/4
但我想要的是/api/products/:id
因为我的目的是跟踪/api/products/:id
API的性能 .
env['REQUEST_PATH']
并env['REQUEST_URI']
给出相同的回应.
Rails.application.routes.router.recognize({"path_info" => env['PATH_INFO']})
Run Code Online (Sandbox Code Playgroud)
或者像这样
Rails.application.routes.router.recognize(env['PATH_INFO']) …
Run Code Online (Sandbox Code Playgroud) 我需要将当前视图的路径传递给该视图中的局部渲染,以便生成指向视图本身的链接(在局部中)。禁用javascript时如何获取当前视图的路径?
<%= render "errors", object: @car.plate, path: (what?)%>
Run Code Online (Sandbox Code Playgroud)