Ruby on rails 群集puma不同时接受超过1个请求

Ruby on rails 群集puma不同时接受超过1个请求,ruby-on-rails,ruby,puma,mri,Ruby On Rails,Ruby,Puma,Mri,我已根据heroku手册设置了puma web服务器: config/puma.rb: workers Integer(ENV['WEB_CONCURRENCY'] || 2) threads_count = Integer(ENV['RAILS_MAX_THREADS'] || 2) threads threads_count, threads_count preload_app! rackup DefaultRackup port ENV['PORT']

我已根据heroku手册设置了puma web服务器:

config/puma.rb

workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['RAILS_MAX_THREADS'] || 2)
threads threads_count, threads_count

preload_app!

rackup      DefaultRackup
port        ENV['PORT']     || 3000
environment ENV['RACK_ENV'] || 'development'

on_worker_boot do
  ActiveRecord::Base.establish_connection
end
Procfile
包含:

web: bundle exec puma -C config/puma.rb
现在,当我尝试访问具有延迟响应的
sleep 10
的操作,然后尝试访问其他一些操作时,我的理解是Puma将同时处理这两个请求(因为我有两个工作人员)。但是它会等待第一个休眠的请求完成,然后继续执行第二个请求。我错过什么了吗

我的设置是:

  • Ruby 2.2.4

  • Rails 4.2.0

编辑:


好的,我发现在Heroku上,它是有效的,所以问题是,为什么它在开发模式下不起作用?

rails s
不使用Procfile,您可能想看看如何使用foreman这样的工具:

更新:这就是解决方案:


config.allow\u concurrency=true
在rails开发配置中。

您是如何运行正在开发中的服务器的?这很奇怪,因为从我在启动服务器时在日志中看到的情况来看,Puma似乎是按照我设置的配置启动的。所以即使我和Foreman一起启动服务器,这仍然不起作用。@MartinSvoboda在您的
config/development.rb
中尝试
config.allow\u concurrency=true
,因此这还有另一个问题。当我设置
allow\u concurrency=true
时,开发登录终端仅显示第一个请求,然后似乎没有注册任何请求。@Martinsvobda尝试跟踪日志/development.log。我假设所有的输出都在那里。在开发中不使用并发,因此一些典型的开发工具可能无法完全按照预期工作(例如pry)