Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:在请求结束时运行逻辑,而不考虑过滤器链中止?_Ruby On Rails_Logging_Controller_Filter_Action Filter - Fatal编程技术网

Ruby on rails Rails:在请求结束时运行逻辑,而不考虑过滤器链中止?

Ruby on rails Rails:在请求结束时运行逻辑,而不考虑过滤器链中止?,ruby-on-rails,logging,controller,filter,action-filter,Ruby On Rails,Logging,Controller,Filter,Action Filter,rails文档中是否讨论了在请求结束时调用函数的可靠机制,而不考虑过滤器链中止 它不是在过滤器之后,因为如果之前的过滤器被重定向或渲染,则不会调用过滤器之后 对于上下文,我试图在每个请求结束时将一些结构化的分析/报告信息放入应用程序日志中。此信息在整个请求生命周期内通过封装在自定义控制器访问器中的实例变量收集,并在最后转储为JSON blob,供后处理脚本使用 我的最终目标是生成有关我的应用程序的逻辑查询分布(取决于控制器逻辑的内容,而不仅仅是请求URI和参数)、性能配置文件(用于特定DB查询或

rails文档中是否讨论了在请求结束时调用函数的可靠机制,而不考虑过滤器链中止

它不是在过滤器之后,因为如果之前的过滤器被重定向或渲染,则不会调用过滤器之后

对于上下文,我试图在每个请求结束时将一些结构化的分析/报告信息放入应用程序日志中。此信息在整个请求生命周期内通过封装在自定义控制器访问器中的实例变量收集,并在最后转储为JSON blob,供后处理脚本使用

我的最终目标是生成有关我的应用程序的逻辑查询分布(取决于控制器逻辑的内容,而不仅仅是请求URI和参数)、性能配置文件(用于特定DB查询或阻止Web服务的时间)、故障率的报告(包括被before_filter验证规则拒绝的无效传入请求),以及大量无法从应用程序和apache日志中的基本信息中真正解析的其他内容


在更高的层次上,是否有不同的“轨道方式”这解决了我的应用程序评测目标?

您需要一个中间件,该中间件可以在应用程序完成请求后执行代码。有关指南中的更多信息,请参阅:

您需要一个中间件,该中间件可以在应用程序完成请求后执行代码。有关过滤器应解决此问题的更多信息,请参阅指南:

今天的问题是:


(非常古老的线程-但在我找到答案之前就遇到了这个问题)

现在,围绕过滤器应该可以解决这个问题:


(这是一条非常古老的线索——但在我找到答案之前就发现了)

我如何将信息传递给rack应用程序-响应头?我仍然需要一种机制,以便在任何请求结束时可靠地添加这样的头,而不管过滤链是否中止,因此,问题是否保持不变?此处更新:如果没有rails直接支持的always run post request钩子机制,最好的方法就是这样做当信息可用时,是否将其存储在机架环境中,然后使用机架中间件对其进行记录。您也可以在机架环境数据存储中详细记录信息,并根据需要在中间件中汇总信息,因此rails机制并非真正必要。我如何将信息传递给机架应用程序-响应标头?我仍然不知道无论过滤链是否中止,都可以在任何请求的末尾可靠地添加这样一个头,因此,问题不会保持不变吗?这里更新:如果没有rails直接支持的always run post request钩子机制,最好的方法是在机架环境中存储可用的信息,然后使用rack中间件来记录它。如果需要,您也可以在机架环境数据存储中详细记录并在中间件中汇总它,因此rails机制并不是真正必要的。虽然around Filter确实比after Filter在这方面有所改进,但在正常情况下,它们不会完成运行,例如在excep上在这种情况下,around过滤器的“after”阶段仍然不会运行。因此我认为机架中间件仍然是最可靠的解决方案,在Rails 3中,它需要位于“上面”的中间件堆栈中ActionDispatch::ShowExceptions,其中捕获和处理了此类异常。虽然around筛选器确实是对after筛选器的改进,但在一些正常情况下,它们不会完成运行,例如在异常上(例如ActiveRecord::NotFound)。在这种情况下,“after”环绕过滤器的阶段仍然不会运行。因此我认为机架中间件仍然是最可靠的解决方案,请注意,在Rails 3中,它需要位于中间件堆栈“上方”ActionDispatch::ShowExceptions中,这样的异常会被捕获并处理。