Ruby / JRuby和WEBrick一次请求一个

时间:2010-06-15 13:19:53

标签: ruby-on-rails ruby jruby webrick

有谁知道如何强制WEBrick一次处理多个请求?我在我的页面上使用了一些Ajax用于长时间运行的数据库相关任务,我可以清楚地看到请求正在管道中处理。

4 个答案:

答案 0 :(得分:4)

如果您使用JRuby,请查看GlassFish gem(宝石形式的精简GlassFish服务器),Trinidad gem(使用Tomcat的相同内容),或warbler等各种其他选项(生成.war文件,您可以直接运行或部署到任何应用服务器)。 JRuby是确保在Ruby上部署高度并发应用程序的最简单方法,并使C Ruby选项看起来相当原始。

答案 1 :(得分:2)

webrick一次只处理一个请求,这对于开发来说通常很好。 如果您希望并行运行,请查看mongrel_cluster或者当然是unicornpassenger

答案 2 :(得分:0)

对于长时间运行的请求,绝对不应该使用WEBrick。该作业的最佳Web服务器可能是Thin,因为它由EventMachine提供支持,可以编写异步代码,以便服务器不会阻塞。

答案 3 :(得分:0)

如果您正在运行rails 4,您可以应用以下补丁,webrick将同时开始提供请求。

diff --git a/railties/lib/rails/commands/server.rb b/railties/lib/rails/commands/server.rb
index e3119ec..ef04aa8 100644
--- a/railties/lib/rails/commands/server.rb
+++ b/railties/lib/rails/commands/server.rb
@@ -93,14 +93,6 @@ module Rails
       middlewares << [Rails::Rack::Debugger]  if options[:debugger]
       middlewares << [::Rack::ContentLength]

-      # FIXME: add Rack::Lock in the case people are using webrick.
-      # This is to remain backwards compatible for those who are
-      # running webrick in production. We should consider removing this
-      # in development.
-      if server.name == 'Rack::Handler::WEBrick'
-        middlewares << [::Rack::Lock]
-      end
-
       Hash.new(middlewares)
     end