Frage

Ich schließe diese einfache Rack-Middleware in einer Rails-Anwendung:

class Hello

  def initialize(app)
    @app = app
  end

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

end

Plug-in innerhalb 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
...

Ich bin mit Rails 2.3.5, 1.3.1 WEBrick, Rubin 1.8.7

Wenn die Anwendung im Produktionsmodus gestartet wird, alles funktioniert wie erwartet - jede Anfrage von der Hallo-Middleware abgefangen wird, und „Hallo“ zurückgegeben. Wenn jedoch im Entwicklungsmodus laufen, die erste Anforderung funktioniert „Hallo“, aber die nächste Anforderung hängt zurück.

Unterbrechen webrick, während es in den hängenden Zustand Ausbeuten, ist dies:

^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

Etwas mit der Klasse Nachlader im Entwicklungsmodus zu tun. Es gibt auch in der Ausnahme von Deadlock erwähnen.

Alle Ideen, was dieses verursachen könnte? Alle Empfehlungen in Bezug auf den besten Ansatz, um dies zu debuggen?

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

Sieht aus wie könnte es in dieser Frage in Beziehung gesetzt werden:

https://rails.lighthouseapp.com / Projekte / 8994 / Karten / 3153-actioncontrollerintegrationsession-broken-in-234

War es hilfreich?

Lösung

Ich habe mit einem Hack kommen, die mich durch die Zeit Wesen bekommen. Es ist auf dem Ticket oben erwähnt.

https://rails.lighthouseapp.com / Projekte / 8994 / Karten / 3153-actioncontrollerintegrationsession-broken-in-234

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top