2009-11-08 68 views
0

我正在构建一个应用程序,该应用程序与Rails向Rails发送请求的Rails后端进行通信。这是失败的。有没有简单的方法让Rails日志和吐出来控制每个传入HTTP请求的整体?在Rails中,如何记录每个传入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> 

但错误的Rails吐出来时,我的应用程序发送一个请求:!

/\保险/ \太阳年11月8 11时38分23秒 - 0500 2009 Status:500 Internal Server Error bad content body /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:在`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_controller/session/cookie_store.rb:93:在'call'中 /Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/ action_controller/failsafe.rb:26:`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:在'synchronize'中 /Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/lock。 rb:11:在'call'中 /Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/dispat cher.rb:114:in`call' /Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/reloader.rb:34:in`run' /Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/dispatcher.rb:108:在`call'中 /Library/Ruby/Gems/1.8/gems/rails-2.3.4/lib/rails/rack/static。 rb:31:'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:在'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:在'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:in`process' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby​​/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:159:in'process_client' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby​​/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:158:在'each'中 /System/Library/Frameworks/Ruby.framework/版本/ 1.8/usr/lib/ruby​​/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:158:in'process_client' /System/Library/Frameworks/Ruby.framework/Versions/1.8/ usr/lib/ruby​​/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:'run' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in`initialize' /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:in'run' /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:'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 ' script/server:3

回答

1

我很感谢你的回应,gunderson,尽管它并没有让我找到一个解决方案。我最终使用第三方工具PacketPeeper来连接到我的环回设备并报告所有TCP通信。

我的问题是由于我在使用的客户端网络库中的错误(错误地将我的XML/JSON报告为多部分表单)引起的。

2

你最好的选择很可能使前端服务器(Apache时,Nginx的,等等),这些吐了......

或者,如果你想从轨做,在控制器中,例如使用request.env如下

logger.info(request.env.inspect) 
+0

不幸的是,Rails在调用我的任何控制器代码之前就炸毁了,所以日志语句从不运行。我想我会考虑打印每个进入Mongrel服务器的请求,然后...... – 2009-11-08 17:04:54

0

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

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

然后与其他config S::链...

将这个代码在你的lib目录下(或在application.rb底部)

config.middleware.use "Loggo"