[Ruby-On-Rails] Häufige SystemExit in Ruby bei HTTP-Aufrufen


Answers

Es ist eine Weile her, seit ich FCGI verwendet habe, aber ich denke, ein FCGI-Prozess könnte eine SystemExit auslösen, wenn der Thread zu lange dauert. Dies könnte der Webdienst sein, der nicht antwortet, oder sogar eine langsame DNS-Abfrage. Einige Google-Ergebnisse zeigen einen ähnlichen Fehler bei Python und FCGI, daher wäre es eine gute Idee, zu Mischling zu wechseln. Dieser Beitrag ist meine Referenz Ich habe Mongrel eingerichtet und ich verweise immer noch darauf.

Question

Ich habe eine Ruby on Rails-Website, die HTTP-Anrufe an einen externen Webdienst ausführt.

Ungefähr einmal am Tag erhalte ich eine SystemExit (stacktrace below) Fehler-E-Mail, bei der ein Aufruf des Dienstes fehlgeschlagen ist. Wenn ich dann genau die gleiche Anfrage auf meiner Website später noch einmal versuche, funktioniert es gut. Es passiert, seit die Website live ging und ich hatte kein Glück, herauszufinden, was es verursacht.

Ruby ist Version 1.8.6 und Rails ist Version 1.2.6.

Jeder andere hat dieses Problem?

Das ist der Fehler und der Stacktrace.

Eine SystemExit ist aufgetreten /usr/local/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/fcgi_handler.rb:116:in exit '/usr/local/lib/ruby/gems/1.8/gems/ rails-1.2.6 / lib / fcgi_handler.rb: 116: in exit_now_handler '/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_support/inflector.rb:250:in to_proc '/usr/local/lib/ruby/1.8/net/protocol.rb:133:in Anruf' /usr/local/lib/ruby/1.8/net/protocol.rb:133:in sysread '/ usr / local / lib / ruby ​​/ 1.8 / net / protokoll.rb: 133: in rbuf_fill '/usr/local/lib/ruby/1.8/timeout.rb:56:in timeout' /usr/local/lib/ruby/1.8/timeout. rb: 76: in timeout '/usr/local/lib/ruby/1.8/net/protocol.rb:132:in rbuf_fill' /usr/local/lib/ruby/1.8/net/protocol.rb:116:in readuntil '/usr/local/lib/ruby/1.8/net/protocol.rb:126:in readline' /usr/local/lib/ruby/1.8/net/http.rb:2017:in read_status_line '/ usr / local / lib / ruby ​​/ 1.8 / net / http.rb: 2006: in read_new '/usr/local/lib/ruby/1.8/net/http.rb:1047:in Anfrage' /usr/local/lib/ruby/1.8/ net / http.rb: 945: in request_get '/usr/local/lib/ruby/1.8/net/http.rb:380:i n get_response '/usr/local/lib/ruby/1.8/net/http.rb:543:in start' /usr/local/lib/ruby/1.8/net/http.rb:379:in get_response '




Ich würde auch einen Blick auf Passenger werfen. Es ist viel einfacher, loszulegen als die traditionelle Lösung von Apache / Nginx + Mongrel.






Links