ruby – 如何使用补丁RequestId中间件或为什么Heroku不使用标准的HTTP_X_REQUEST_ID?

ruby – 如何使用补丁RequestId中间件或为什么Heroku不使用标准的HTTP_X_REQUEST_ID?,第1张

概述Heroku从其路由器推出了 new labs feature for tracking http-request-id. 一个小小的背景为什么它有用:Rails 3.2推出了TaggedLogger到include a unique request ID into the logs的功能,以便您可以跟踪给定日志行所属的Web请求.当运行多个将其日志流式传输到同一日志存储的Web服务器时,这非常重 Heroku从其路由器推出了 new labs feature for tracking http-request-id.

一个小小的背景为什么它有用:Rails 3.2推出了TaggedLogger到include a unique request ID into the logs的功能,以便您可以跟踪给定日志行所属的Web请求.当运行多个将其日志流式传输到同一日志存储的Web服务器时,这非常重要,例如,在Heroku或Unicorn设置等多个dynos中很常见.

现在,通过Heroku的实验室功能,Heroku路由器将生成此请求ID,以便您可以在进入应用程序之前跟踪来自路由器级别的请求.这很重要,例如如果请求由于超时等原因未能完成

不幸的是,Heroku没有为此选择标准请求标头密钥,即Rails可以接受并通过的http_X_REQUEST_ID,而是组成一个自定义的http_HEROKU_REQUEST_ID,Rails将不经过修改而无法通过. Heroku,为什么这次偏离惯例呢?

所以,我有两个选择:将Rails默认的RequestID中间件替换为副本&使用Heroku的标题密钥粘贴作业,或者修补Rails中间件.我不喜欢copy&粘贴工作,因为他们不干燥,很容易变得陈旧,留下猴子补丁是更好的选择.但是怎么样呢?

我尝试添加一个文件config / initializers / mIDdleware.rb:

module Actiondispatch  class RequestID    private    def external_request_ID(env)      if request_ID = env["http_X_REQUEST_ID"].presence || env['http_HEROKU_REQUEST_ID'].presence        request_ID.gsub(/[^\w\-]/,"").first(255)      end    end  endend

但这并没有得到执行.我怎么修补这个?

解决方法 有一个解决方案!
我刚刚将它添加到我的production.rb中,它的工作原理!

config.log_Tags = [lambda {|req| req.env['http_HEROKU_REQUEST_ID']}]

积分到https://stackoverflow.com/a/10712252/2422778和Railscasts

编辑
只是想指出,截至2014年1月17日,Heroku修复了请求ID标题名称,现在就是

env['http_X_REQUEST_ID']

见:https://devcenter.heroku.com/articles/http-request-id

总结

以上是内存溢出为你收集整理的ruby – 如何使用补丁RequestId中间件或为什么Heroku不使用标准的HTTP_X_REQUEST_ID?全部内容,希望文章能够帮你解决ruby – 如何使用补丁RequestId中间件或为什么Heroku不使用标准的HTTP_X_REQUEST_ID?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1279991.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-09
下一篇2022-06-09

发表评论

登录后才能评论

评论列表(0条)

    保存