Pregunta

incluyo este sencillo Estante Middleware en una aplicación Rails:

class Hello

  def initialize(app)
    @app = app
  end

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

end

enchufarlo en el interior 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
...

Estoy usando Rails 2.3.5, 1.3.1 WEBrick, Ruby 1.8.7

Cuando la aplicación se inicia en el modo de producción, todo funciona como se esperaba - cada petición es interceptada por el middleware Hola, y "Hola" se devuelve. Sin embargo, cuando se ejecuta en modo de desarrollo, la primera petición funciona volviendo "Hola", pero se bloquea la siguiente solicitud.

Interrupción WEBrick mientras que está en los rendimientos estado bloqueado esto:

^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

Algo que ver con el recargador de clases en el modo de desarrollo. También se hace mención de estancamiento en la excepción.

¿Alguna idea de lo que podría ser la causa? Ninguna recomendación en cuanto a la mejor manera de depurar este?

Actualizar

$ 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

parece que podría estar relacionado con este tema:

https://rails.lighthouseapp.com / proyectos / 8994 / entradas / 3153-actioncontrollerintegrationsession roto-en-234-

¿Fue útil?

Solución

Yo he llegado con un truco que me llevará por el ser el tiempo. Es en el billete se ha mencionado anteriormente.

https://rails.lighthouseapp.com / proyectos / 8994 / entradas / 3153-actioncontrollerintegrationsession roto-en-234-

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top