Ruby 1.9.1-p234、Passenger 2.2.5、Rails 2.3 - POST リクエストでの安定したクローズド ストリーム

StackOverflow https://stackoverflow.com/questions/1627582

質問

Ubuntu サーバー上に Ruby 1.9.1 (p234) をセットアップしました。Rails 2.3 安定版をベンダーが提供する Rails アプリを Apache 2.2/Passenger 2.2.5 上にデプロイしようとしています。

GET リクエストは正常に動作しますが、POST リクエストは次のログ エントリで即座に中断されます。

Processing UsersController#new (for 80.203.77.44 at 2009-10-24 20:54:55) [GET]
  Parameters: {"controller"=>"users", "action"=>"new"}
Rendering template within layouts/application
Rendering users/new
Completed in 23ms (View: 20, DB: 0) | 200 OK [http://myapp/user/new]
/!\ FAILSAFE /!\  2009-10-24 20:55:01 +0200
  Status: 500 Internal Server Error
  closed stream
    /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.5/vendor/rack-1.0.0-git/lib/rack/rewindable_input.rb:86:in make_rewindable'
    /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.5/vendor/rack-1.0.0-git/lib/rack/rewindable_input.rb:26:inread'
    /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.5/vendor/rack-1.0.0-git/lib/rack/request.rb:136:in POST'
    /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.5/vendor/rack-1.0.0-git/lib/rack/methodoverride.rb:15:incall'
    /var/www/myapp/app/releases/20091021213913/vendor/rails/actionpack/lib/action_controller/params_parser.rb:15:in call'
    /var/www/myapp/app/releases/20091021213913/vendor/rails/actionpack/lib/action_controller/session/cookie_store.rb:93:incall'
    /var/www/myapp/app/releases/20091021213913/vendor/rails/actionpack/lib/action_controller/failsafe.rb:26:in call'
    /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.5/vendor/rack-1.0.0-git/lib/rack/lock.rb:11:inblock in call'
    :8:in synchronize'
    /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.5/vendor/rack-1.0.0-git/lib/rack/lock.rb:11:incall'
    /var/www/myapp/app/releases/20091021213913/vendor/rails/actionpack/lib/action_controller/dispatcher.rb:106:in call'
    /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.5/lib/phusion_passenger/rack/request_handler.rb:95:inprocess_request'
    /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.5/lib/phusion_passenger/abstract_request_handler.rb:207:in main_loop'
    /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.5/lib/phusion_passenger/railz/application_spawner.rb:378:instart_request_handler'
    /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.5/lib/phusion_passenger/railz/application_spawner.rb:336:in block in handle_spawn_application'
    /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.5/lib/phusion_passenger/utils.rb:183:insafe_fork'
    /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.5/lib/phusion_passenger/railz/application_spawner.rb:334:in `handle_spawn_application'

...そしてその後、いくつかの。

読んでみたところ、次のことがわかりました。 http://blog.labnotes.org/2009/09/01/ruby-1-9-1-p234passenger-2-2-5-tempfile-rb-fix/ これは、Ruby 1.9.1-p234 の tempfile.rb から 1 行を削除するパッチを指します。残念なことに、そのファイルを調べてみると、攻撃的な行はすでに削除されていることがわかりました。したがって、問題が解決しないため、少しわかりません。何か案は?

役に立ちましたか?

解決

パッセンジャー2.2.8には回避策があるため、これはもう必要ありません。

上記のCasual Jimの回答は私にとってはうまくいきました。ジムにご協力いただきありがとうございます。

私のシステムの差分は、それぞれ次のとおりです。これがお役に立てば幸いです。

キリアン。

*** /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.5/lib/phusion_passenger/utils.rb.orig Tue Nov  3 17:43:30 2009
--- /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.5/lib/phusion_passenger/utils.rb  Tue Nov  3 17:43:46 2009
***************
*** 31,36 ****
--- 31,37 ----
  require 'etc'
  require 'fcntl'
  require 'tempfile'
+ require 'stringio'
  require 'phusion_passenger/exceptions'
  if !defined?(RUBY_ENGINE) || RUBY_ENGINE == "ruby"
    require 'phusion_passenger/native_support'


*** /usr/local/lib/ruby/1.9.1/tempfile.rb.orig  Tue Nov  3 17:44:34 2009
--- /usr/local/lib/ruby/1.9.1/tempfile.rb   Tue Nov  3 17:45:55 2009
***************
*** 137,143 ****
      # keep this order for thread safeness
      begin
        if File.exist?(@tmpname)
!         closed? or close
          File.unlink(@tmpname)
        end
        @@cleanlist.delete(@tmpname)
--- 137,143 ----
      # keep this order for thread safeness
      begin
        if File.exist?(@tmpname)
!         # closed? or close
          File.unlink(@tmpname)
        end
        @@cleanlist.delete(@tmpname)

他のヒント

それを機能させるには次のことを行う必要がありました

gems/cassenger-2.2.5/lib/phusion_passenger/utils.rb add add requien

lib/ruby/1.9.1/tempfile.rbコメントOut line 140

そしてそれは魔法のように機能します。

ちょっとダミアン。私は同じ問題を抱えていましたが、メモリから正確な答え/リンクを受け取っていませんが、一時ファイルをラックにパッチし、ではありません。これが役立つことを願っています

Casual Jimの修正はうまくいきました。おかげで、この問題は私を悩ませました。

また、actionviewにパッチを適用しなければなりませんでした( https://rails.lighthouseapp.com/projects/8994/tickets/2188-i18n-fails-with-multibyte-strings-in-ruby-19 -similar-to-2038 )を使用してRailsとRuby 1.9.1を動作させます。

この修正を適用すると、tmp / restart.txtメソッドを使用してPassengerモジュールを数回以上再起動できません。その後、リクエストは受け入れられますが、処理されません。パッチが一時ファイルをリークしている可能性があります

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top