问题
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: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'
...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?
回答1:
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)
回答2:
I had to do the following to make it work
gems/passenger-2.2.5/lib/phusion_passenger/utils.rb add require 'stringio' to that file on line 34
open lib/ruby/1.9.1/tempfile.rb comment out line 140
And it works like a charm.
回答3:
Hey Damien. I had the same problem and whilst i havent got an exact answer/link for you from memory i had to patch rack and not tempfile. I hope this helps
回答4:
Casual Jim's fix worked for me, thanks, this problem was driving me nuts.
I also had to patch actionview (per hector gomez's patch at https://rails.lighthouseapp.com/projects/8994/tickets/2188-i18n-fails-with-multibyte-strings-in-ruby-19-similar-to-2038) to get rails and ruby 1.9.1 working.
回答5:
When applying this fix, I cannot restart the Passenger module more than a few time using the tmp/restart.txt method. After that, requests are accepted but never served. I suspect that the patch may be leaking tempfiles
来源:https://stackoverflow.com/questions/1627582/ruby-1-9-1-p234-passenger-2-2-5-rails-2-3-stable-closed-stream-on-post-request