我试图服务于多个请求,同时在轨道4,这是我能够用做得很轻松config.threadsafe!,并Puma在Rails 3中.
说我有这个控制器
class ConcurrentController < ApplicationController
def index
sleep 10000
end
def show
end
end
Run Code Online (Sandbox Code Playgroud)
我以前能够开始使用puma puma -t 2:16 -p 3000(最少2个线程)然后点击index然后show仍然可以show正确渲染.
在Rails 4中,如果我尝试做同样的事情,Puma现在会锁定index请求并且show永远不会被渲染.当我点击Ctrl-C服务器时,Puma给了我这个错误:
Rack app error: #<ThreadError: Attempt to unlock a mutex which is locked by another thread>
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么来获得并发使用Rails 4?config.threadsafe!应该是不需要的(即使我尝试也没有区别)
我正在考虑将我们的ruby解释器更新为JRuby,因为我们必须从我们的应用程序中删除任何2.x特定语法并采用ruby 1.9.3兼容性,因此非常头疼.哪个不是世界末日.
当运行应用程序时,我发现我们不能在群集模式下使用Puma.问题是,鉴于过去几年MRI的所有修复和变化,"真实线程"仍然有效的好处是什么?
更新
为了使其更加客观,问题是,"最新版本的MRI是否否定了采用JRuby来实现本机线程为您提供的相同优势的必要性?"