在Rails中记录默认路由的使用

7
我希望能够从一个生产环境的Rails应用程序中删除“catch all”或“default”路由。我希望在收集其使用日志的同时保持操作,以便我可以用适当的硬编码路由替换它。因此,假设我在config/routes.rb文件中有以下默认路由行。
match '/:controller(/:action(/:id))'

我如何创建或检索每次访问该路由的日志。该日志理想情况下应仅包括实际由此路由处理的请求以及参数,并且需要使路由本身正常运行。

2个回答

8
另一种可能的方法是利用Rails路由器的constraints选项:
match '/:controller(/:action(/:id))', constraints: -> (req) {
  Rails.logger.info("Default route used: #{req.path.inspect}")
  true
}

注意:Lambda函数返回true以使匹配成功。

7

您可以通过更改默认路由方式来完成此操作:

match ':controller(/:action(/:id))(.:format)', :using_default_route => true

然后将以下功能放入app/controllers/application_controller.rb中。
before_filter do
  if params[:using_default_route]
    logger.info("Default route for #{request.path.inspect}. params = #{params.inspect}")
  end
end

只是一个更新。虽然这可以用于记录传入路由,但会导致默认路由的路由生成不匹配(因为未传递using_default_route)。我通过在第一次匹配后添加第二次匹配来修复了这个问题,这将允许生成,并且如果使用它,则会被检测到。然而,我的担心是最终删除这两行将导致这些视图失败。如果有一种方法可以记录使用默认路由的生成,那就太好了。 - Blake Taylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接