Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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中,如何记录每个传入HTTP请求的全部内容?_Ruby On Rails_Http_Logging - Fatal编程技术网

Ruby on rails 在Rails中,如何记录每个传入HTTP请求的全部内容?

Ruby on rails 在Rails中,如何记录每个传入HTTP请求的全部内容?,ruby-on-rails,http,logging,Ruby On Rails,Http,Logging,我正在构建一个与正在向Rails发送请求的Rails后端对话的应用程序。它失败了。有没有一种简单的方法让Rails日志和spit来控制每个传入HTTP请求的全部内容 如果有人觉得自己特别仁慈,你可以帮助解决潜在的问题。使用简单的curl命令可以很好地工作: $ curl -X POST -d "<person><name>Jack</name></person>" -H "Content-Type: application/xml" http:/

我正在构建一个与正在向Rails发送请求的Rails后端对话的应用程序。它失败了。有没有一种简单的方法让Rails日志和spit来控制每个传入HTTP请求的全部内容


如果有人觉得自己特别仁慈,你可以帮助解决潜在的问题。使用简单的curl命令可以很好地工作:

$ curl -X POST -d "<person><name>Jack</name></person>" -H "Content-Type: application/xml" http://localhost:3000/people.xml
 <?xml version="1.0" encoding="UTF-8"?>
 <person>
  <created-at type="datetime">2009-11-08T16:36:54Z</created-at>
  <id type="integer">3</id>
  <name>Jack</name>
  <updated-at type="datetime">2009-11-08T16:36:54Z</updated-at>
 </person>
$curl-X POST-d“Jack”-H“内容类型:application/xml”http://localhost:3000/people.xml
2009-11-08T16:36:54Z
3.
杰克
2009-11-08T16:36:54Z
但Rails在我的应用程序发送请求时抛出的错误是:

/!\ 故障保护/!\2009年11月8日星期日11:38:23-0500 状态:500内部服务器错误 不良内容正文 /Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/utils.rb:347:in“parse_multipart” /Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/utils.rb:319:in'loop' /Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/utils.rb:319:in“parse_multipart” /Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/request.rb:141:in'POST' /Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/methodoverride.rb:15:in'call' /Library/Ruby/Gems/1.8/Gems/actionpack-2.3.4/lib/action_controller/params_parser.rb:15:in'call' /Library/Ruby/Gems/1.8/Gems/actionpack-2.3.4/lib/action\u controller/session/cookie\u store.rb:93:in'call' /Library/Ruby/Gems/1.8/Gems/actionpack-2.3.4/lib/action\u controller/failsafe.rb:26:in'call' /Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/lock.rb:11:in'call' /Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/lock.rb:11:在“同步”中 /Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/lock.rb:11:in'call' /Library/Ruby/Gems/1.8/Gems/actionpack-2.3.4/lib/action\u controller/dispatcher.rb:114:in'call' /Library/Ruby/Gems/1.8/Gems/actionpack-2.3.4/lib/action\u controller/reloader.rb:34:in'run' /Library/Ruby/Gems/1.8/Gems/actionpack-2.3.4/lib/action\u controller/dispatcher.rb:108:in'call' /Library/Ruby/Gems/1.8/Gems/rails-2.3.4/lib/rails/rack/static.rb:31:in'call' /Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/urlmap.rb:46:in'call' /Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/urlmap.rb:40:in'each' /Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/urlmap.rb:40:in'call' /Library/Ruby/Gems/1.8/Gems/rails-2.3.4/lib/rails/rack/log_tailer.rb:17:in'call' /Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/content_length.rb:13:in'call' /Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/chunked.rb:15:in'call' /Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/handler/mongrel.rb:61:在“进程”中 /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/Ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:159:在“进程\客户端”中 /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/Ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:158:in'each' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/Ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:158:在“进程\客户端”中 /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/Ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:运行中 /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/Ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:在“初始化”中 /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/Ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in'new' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/Ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:运行中 /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/Ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:268:in'initialize' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/Ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:268:in“new” /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/Ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:268:in'run' /Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/handler/mongrel.rb:34:in'run' /Library/Ruby/Gems/1.8/Gems/rails-2.3.4/lib/commands/server.rb:111 /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in'gem_original_require' /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in'require' 脚本/服务器:3
您最好的选择可能是让前端服务器(apache、nginx等)将这些内容吐出来

或者,如果要从rails执行此操作,请在控制器中使用
request.env
,例如,如下所示

logger.info(request.env.inspect)

我感谢你的回答,冈德森,尽管这并没有让我找到解决办法。我最终使用了第三方工具,连接到我的环回设备并报告所有TCP流量


我的问题是由于我使用的客户端网络库(错误地将我的XML/JSON报告为多部分形式)中的疏忽造成的。

logger.info request.env
代码在Rails控制器中运行良好,但要查看更原始的版本,或者如果您使用的是Grape或其他安装的应用程序,您必须在通过机架中间件链的途中拦截请求

将此代码放入lib目录(或位于
application.rb
的底部):

然后与
application.rb中的其他
config
s一起进入:

require 'pp'
class Loggo
  def initialize(app)
    @app = app
  end
  def call(env)
    pp env
    @app.call(env)
  end
end
config.middleware.use "Loggo"

不幸的是,Rails在调用任何控制器代码之前就崩溃了,所以log语句永远不会运行。我想接下来我会研究打印进入Mongrel服务器的每个请求。。。