On Jul 22, 7:58 pm, Josh [email protected] wrote:
=r
Posted viahttp://www.ruby-forum.com/.
I too was affected when Bluehost upgraded to Rails 2.3.3. My app had
been running just fine frozen to Rails 2.3.2. The day Bluehost
upgraded to 2.3.3 the app broke.
The following error was found in my fastcgi.crash.log
[23/Jul/2009:10:00:28 :: 23983] Dispatcher failed to catch: undefined
method read' for class
FCGI::Stream’ (NameError) /usr/lib/ruby/gems/
1.8/gems/rack-1.0.0/lib/rack/handler/fastcgi.rb:7
/home/username/rails/app/vendor/rails/railties/lib/fcgi_handler.rb:
103:in process_request' /home/username/rails/app/vendor/rails/ railties/lib/fcgi_handler.rb:153:in
with_signal_handler’
/home/username/rails/app/vendor/rails/railties/lib/fcgi_handler.rb:
101:in process_request' /home/username/rails/app/vendor/rails/railties/lib/fcgi_handler.rb: 78:in
process_each_request’
/usr/lib/ruby/gems/1.8/gems/fcgi-0.8.7/lib/fcgi.rb:117:in
session' /usr/lib/ruby/gems/1.8/gems/fcgi-0.8.7/lib/fcgi.rb:104:in
each_request’
/usr/lib/ruby/gems/1.8/gems/fcgi-0.8.7/lib/fcgi.rb:36:in each' /home/username/rails/app/vendor/rails/railties/lib/fcgi_handler.rb: 77:in
process_each_request’
/home/username/rails/app/vendor/rails/railties/lib/fcgi_handler.rb:
76:in catch' /home/username/rails/app/vendor/rails/railties/lib/ fcgi_handler.rb:76:in
process_each_request’
/home/username/rails/app/vendor/rails/railties/lib/fcgi_handler.rb:
51:in process!' /home/username/rails/app/vendor/rails/railties/lib/fcgi_handler.rb: 23:in
process!’
dispatch.fcgi:24
unhandled dispatch error
Josh’s message got me on the right track to a fix, but didn’t quite
work. I believe this is in fact a bug in the rack gem.
Step 1: Install the rack gem locally
gem install rack
Step 2: Fix the bug in the locally installed rack gem
Edit /path/to/local/gems/rackrack-1.0.0/lib/rack/handler/fastcgi.rb.
Move line #7 to just below the definition of the read method. It
should look as follows.
class FCGI::Stream
def read(n, buffer=nil)
buf = _rack_read_without_buffer n
buffer.replace(buf.to_s) if buffer
buf
end
alias _rack_read_without_buffer read
end
You can determine the path to your locally installed gems by running
‘gem env’. Look for ‘INSTALLATION DIRECTORY’.
Step 3: Tell your rails app to use the local gem instead of the system
gem
Edit the environment.rb file for your application and add the
following to the top.
ENV[‘GEM_PATH’] = ‘/path/to/local/ruby/gems’
Use the path exactly as listed next to ‘INSTALLATION DIRECTORY’ when
you run ‘gem env’. In my case, it was /home/username/ruby/gems. You
should not need to specify the path to the global system gems.
Step 4: Kill any running dispatch.fcgi processes
killall -u username dispatch.fcgi
Step 5: Try to access your app
At this point my rails app started with no problem. It’s still frozen
to Rails 2.3.2.
I hope this helps somebody.