我正在开发一些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::Lock
是as far as I know,一个互斥体包裹着整个frigging rails stack(!)。
这是否意味着无论你使用什么平台,rails都没有并发性? (我正在使用JRuby)。
我知道我可以删除锁定:
config.middleware.delete(Rack::Lock)
但遗憾的是,这打破了一切。这是否意味着我的应用程序不是线程安全的?
答案 0 :(得分:4)
您应该在config / environments / production.rb
中看到以下条目 # Enable threaded mode
# config.threadsafe!
在JRuby或其他线程友好的环境中取消注释,以在线程安全模式下部署。