Ruby 1.9.1-p234, Passenger 2.2.5, Rails 2.3-stable closed stream on POST request

passengerrubyruby-1.9ruby-on-rails

I've setup Ruby 1.9.1 (p234) on a Ubuntu server. I'm trying to deploy a Rails app which vendors Rails 2.3-stable on Apache 2.2/Passenger 2.2.5.

GET requests work fine, POST requests break immediately with the following log entry:

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'

…and then some.

I've read up, and found this: http://blog.labnotes.org/2009/09/01/ruby-1-9-1-p234passenger-2-2-5-tempfile-rb-fix/ which points to a patch that removes a single line from Ruby 1.9.1-p234's tempfile.rb. Unfortunately for me, inspecting that file I find that the offensive line has already been removed. So that leaves me a bit clueless, as my problem persists. Any ideas?

Best Answer

There is a workaround in passenger 2.2.8 so this is no longer needed.

Casual Jim's response above worked for me. Thanks very much Jim for your help.

The diffs on my system are, respectively, as follows. I hope this is helpful.

Killian.

*** /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)
Related Topic