2009-11-08 61 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" 
相關問題