
一个小小的背景为什么它有用: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?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)