Rails默认情况下是否具有*零*并发性?

时间:2012-04-02 15:44:40

标签: ruby-on-rails multithreading concurrency mutex rack

我正在开发一些rails的中间件,使用最近的版本:

pfernand-2-mn:~ pfernand$ rails -v
Rails 3.1.2

这是rake middleware

的输出
use ActionDispatch::Static
** use Rack::Lock **
use ActiveSupport::Cache::Strategy::LocalCache
use Rack::Runtime
use Rails::Rack::Logger
use ActionDispatch::ShowExceptions
use ActionDispatch::RemoteIp
use Rack::Sendfile
use ActionDispatch::Callbacks
use ActiveRecord::ConnectionAdapters::ConnectionManagement
use ActiveRecord::QueryCache
use ActionDispatch::Cookies
use ActionDispatch::Session::CookieStore
use ActionDispatch::Flash
use ActionDispatch::ParamsParser
use Rack::MethodOverride
use ActionDispatch::Head
use ActionDispatch::BestStandardsSupport
run MyApp::Application.routes

问题是第二个组件Rack::Lockas far as I know,一个互斥体包裹着整个frigging rails stack(!)

这是否意味着无论你使用什么平台,rails都没有并发性? (我正在使用JRuby)。

我知道我可以删除锁定:

config.middleware.delete(Rack::Lock)

但遗憾的是,这打破了一切。这是否意味着我的应用程序不是线程安全的?

1 个答案:

答案 0 :(得分:4)

您应该在config / environments / production.rb

中看到以下条目
  # Enable threaded mode
  # config.threadsafe!

在JRuby或其他线程友好的环境中取消注释,以在线程安全模式下部署。