Question

J'inclure ce simple Middleware Rack dans une application Rails:

class Hello

  def initialize(app)
    @app = app
  end

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

end

Branchez à l'intérieur 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
...

J'utilise Rails 2.3.5, Webrick 1.3.1, Ruby 1.8.7

Lorsque l'application est démarré en mode de production, tout fonctionne comme prévu - chaque demande est intercepté par le middleware Bonjour, et « Bonjour » est retourné. Cependant, lorsqu'il est exécuté en mode de développement, la première demande de retour fonctionne « Bonjour », mais la requête suivante se bloque.

Interrompre webrick alors qu'il est dans les rendements de l'État hung ceci:

^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

Quelque chose à voir avec le reloader de classe en mode développement. On mentionne aussi l'impasse à l'exception.

Toutes les idées ce qui pourrait être la cause? Les recommandations quant à la meilleure approche pour débugger?

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

On dirait qu'il pourrait être lié à cette question:

https://rails.lighthouseapp.com / projets / 8994 / billets / 3153-actioncontrollerintegrationsession-rodées-234

Était-ce utile?

La solution

Je suis venu avec un hack qui me débrouiller le moment. Il est sur le billet mentionné ci-dessus.

https://rails.lighthouseapp.com / projets / 8994 / billets / 3153-actioncontrollerintegrationsession-rodées-234

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top