Ruby 1.9.1-p234、Passenger 2.2.5、Rails 2.3 - POST リクエストでの安定したクローズド ストリーム
-
06-07-2019 - |
質問
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:in
read'
/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:in
call'
/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:in
call'
/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:in
block 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:in
call'
/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:in
process_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:in
start_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:in
safe_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モジュールを数回以上再起動できません。その後、リクエストは受け入れられますが、処理されません。パッチが一時ファイルをリークしている可能性があります