2012-04-02 86 views
1

我工作的一些中間件軌,一個漂亮的新版本的工作:默認情況下,Rails是否具有* zero *併發性?

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棧(!)

這是否意味着在rails中不存在併發性,無論您使用的是哪種平臺? (我正在使用JRuby)。

我知道我可以刪除該鎖:

config.middleware.delete(Rack::Lock)

但可悲的是,打破一切。這是否意味着我的應用程序不是線程安全的?

+1

簡短的歷史:軌道2不是,大家聲稱這是不可能的,merb證明,否則,合併到軌道3,所以3應該是。 – Reactormonk 2012-04-02 15:55:44

+0

就是那裏的rails3,它在整個堆棧中都有一個互斥鎖。告訴我這是怎麼被認爲mutlithreaded – 2012-04-02 16:01:20

+0

它是如何打破一切? – Reactormonk 2012-04-02 16:06:08

回答

4

您應該看到在配置/環境/ production.rb

# Enable threaded mode 
    # config.threadsafe! 

取消以下表中的內容,JRuby或其他線程友好的環境線程模式部署。

+0

這實際上從中間件堆棧中刪除了'Rack :: Lock'。是否有任何文檔顯示該行的功能? (除去刪除鎖,本身不夠) – 2012-04-02 16:11:12

+1

這是記錄在Rails指南http://guides.rubyonrails.org/configuring.html#configuring-middleware,上次我看。然而,也許並不像你感興趣的那樣細緻。不幸的是,這對我來說只是理論上的選擇,所以我從未跟進過。 – 2012-04-02 16:17:59

相關問題