2010-03-24 68 views
3

我包括在Rails應用程序這個簡單的Rack中間件:Rack中間件僵局

class Hello 

    def initialize(app) 
    @app = app 
    end 

    def call(env) 
    [200, {"Content-Type" => "text/html"}, "Hello"] 
    end 

end 

插上電源裏面的environment.rb:

... 
Dir.glob("#{RAILS_ROOT}/lib/rack_middleware/*.rb").each do |file| 
    require file 
end 
Rails::Initializer.run do |config| 
    config.middleware.use Hello 
... 

我使用Rails 2.3.5,使用WEBrick 1.3 .1,ruby 1.8.7

當應用程序以生產模式啓動時,一切都按預期工作 - 每個請求都被Hello中間件攔截,並返回「Hello」。但是,在開發模式下運行時,第一個請求會返回「Hello」,但下一個請求會掛起。

中斷的WEBrick而這是在掛起狀態收益率這樣的:

^C[2010-03-24 14:31:39] INFO going to shutdown ... 
deadlock 0xb6efbbc0: sleep:- - /usr/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/reloader.rb:31 
deadlock 0xb7d1b1b0: sleep:J(0xb6efbbc0) (main) - /usr/lib/ruby/1.8/webrick/server.rb:113 
Exiting 
/usr/lib/ruby/1.8/webrick/server.rb:113:in `join': Thread(0xb7d1b1b0): deadlock (fatal) 
from /usr/lib/ruby/1.8/webrick/server.rb:113:in `start' 
from /usr/lib/ruby/1.8/webrick/server.rb:113:in `each' 
from /usr/lib/ruby/1.8/webrick/server.rb:113:in `start' 
from /usr/lib/ruby/1.8/webrick/server.rb:23:in `start' 
from /usr/lib/ruby/1.8/webrick/server.rb:82:in `start' 
from /usr/lib/ruby/gems/1.8/gems/rack-1.0.1/lib/rack/handler/webrick.rb:14:in `run' 
from /usr/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/commands/server.rb:111 
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' 
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' 
from script/server:3 

事做在開發模式類reloader。異常中還提到了死鎖。

任何想法可能導致這種情況?有關調試此最佳方法的任何建議?

UPDATE

$ script/console 
Loading development environment (Rails 2.3.5) 
>> app.get '/' 
=> 200 
>> app.get '/' 
ThreadError: stopping only thread 
note: use sleep to stop forever 
from /usr/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/reloader.rb:31:in `lock' 
from /usr/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/reloader.rb:31:in `run' 
from /usr/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/dispatcher.rb:108:in `call' 
from /usr/lib/ruby/gems/1.8/gems/rack-1.0.1/lib/rack/lint.rb:47:in `_call' 
from /usr/lib/ruby/gems/1.8/gems/rack-1.0.1/lib/rack/lint.rb:35:in `call' 
from /usr/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/integration.rb:316:in `process' 
from /usr/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/integration.rb:197:in `get' 
from (irb):2 

看起來它可能與此相關的問題:我想出了一個黑客工具,將被暫時讓我

https://rails.lighthouseapp.com/projects/8994/tickets/3153-actioncontrollerintegrationsession-broken-in-234

回答