ruby – 如何使用补丁RequestId中间件或为什么Heroku不使用标准
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 end end 但这并没有得到执行.我怎么修补这个? 解决方法
有一个解决方案!
我刚刚将它添加到我的production.rb中,它的工作原理! config.log_tags = [lambda {|req| req.env['HTTP_HEROKU_REQUEST_ID']}] 积分到https://stackoverflow.com/a/10712252/2422778和Railscasts 编辑 env['HTTP_X_REQUEST_ID'] 见:https://devcenter.heroku.com/articles/http-request-id (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |