2012-04-02 6 views
1

Ich arbeite für Schienen auf einige Middleware, mit einem hübschen aktuellere Version arbeiten:Hat Rails standardmäßig * null * Nebenläufigkeit?

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

Dies ist die Ausgabe von rake middleware ist:

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 

Die Sache ist, dass die zweite Komponente ist Rack::Lock , as far as I know, ein Mutex, der den ganzen frigging Schienenstapel einwickelt (!).

Bedeutet dies, dass es in Schienen keine Parallelität gibt, egal welche Plattform Sie verwenden? (Ich benutze JRuby).

Ich weiß, dass ich die Sperre löschen mit:

config.middleware.delete(Rack::Lock)

Aber leider, die alles bricht. Bedeutet das, dass meine App nicht sicher ist?

+1

Kurze Geschichte: Schienen 2 war nicht, jeder behauptete, es ist nicht möglich, Merb bewiesen, wurde in Schienen 3 verschmolzen, so sollte 3 sein. – Reactormonk

+0

Das ist rails3 genau dort und es hat einen Mutex um den ganzen Stack. Sag mir, wie das als mutlithreaded betrachtet wird –

+0

Wie bricht es alles? – Reactormonk

Antwort

4

Sie sollten den folgenden Eintrag in config/Umgebungen/production.rb

# Enable threaded mode 
    # config.threadsafe! 

Kommentar- in einem JRuby oder anderer Thread freundliche Umgebung zu implementieren in THREAD Modus sehen.

+0

Das entfernt 'Rack :: Lock' aus dem Middleware-Stack. Gibt es irgendwo Dokumentation, die zeigt, was diese Linie macht? (abgesehen von der Entfernung der Sperre, die an sich nicht genug ist) –

+1

Es wurde in den Rails Guides http://guides.rubyonrails.org/configuring.html#configuring-middleware dokumentiert, das letzte Mal, als ich schaute. Vielleicht nicht so detailliert, wie es sich anhört, aber Sie interessieren sich dafür. Leider war das nur eine theoretische Option für mich, daher habe ich es nie weiter verfolgt. –