2010-10-24 5 views

Antwort

17

Dies wird eine Liste von allen Rack-Anwendungen (einschließlich Middleware):

require 'rack' 

def middleware_classes(app)                                    
    r = [app] 

    while ((next_app = r.last.instance_variable_get(:@app)) != nil) 
    r << next_app 
    end 

    r.map{|e| e.instance_variable_defined?(:@app) ? e.class : e } 
end 

app = Rack::Builder.parse_file('config.ru').first 

p middleware_classes(app) 
+0

+1 arbeitete wie ein Charme. Ich habe das alles in ein 'test-rack.rb' Skript geschrieben und es über' ruby ​​test-rack.rb' ausgeführt. (bearbeitete Frage zum Hinzufügen eines fehlenden Racks erforderlich;) –

-3

diese längst überfällig ist, ich weiß

here's a nice thread, die endgültige Antwort ist der letzte Beitrag

AKTUALISIERT per Marc-Andre Kommentar:

Im Folgenden ist der letzte Beitrag von diesem link

Rack hat keinen Mechanismus dafür und da nicht alle Middleware über @middleware hinzugefügt wird, kann Sinatra nicht sagen, welche Middleware verwendet wird. Weder kann Schienen, BTW, es kann Ihnen nur sagen, was möglich ist. Middleware muss keine lineare Liste sein (d. H. Wenn Sie einen Rack-Router oder etwas anderes verwenden).

+5

-1. Der ganze Sinn von SO besteht darin, die Liste der Postings nicht durchgehen zu müssen. Kopieren und verbessern Sie die richtige Antwort und fügen Sie diesen Link als Quelle hinzu. –

19
> rake middleware 

use ActionDispatch::Static 
use Rack::Lock 
use #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x007ffd148f9468> 
use Rack::Runtime 
use Rack::MethodOverride 
use ActionDispatch::RequestId 
use Rails::Rack::Logger 
use ActionDispatch::ShowExceptions 
use ActionDispatch::DebugExceptions 
use ActionDispatch::RemoteIp 
use ActionDispatch::Reloader 
use ActionDispatch::Callbacks 
use ActiveRecord::Migration::CheckPending 
use ActiveRecord::ConnectionAdapters::ConnectionManagement 
use ActiveRecord::QueryCache 
use ActionDispatch::Cookies 
use ActionDispatch::Session::CookieStore 
use ActionDispatch::Flash 
use ActionDispatch::ParamsParser 
use Rack::Head 
use Rack::ConditionalGet 
use Rack::ETag 
run RackTest::Application.routes 

http://pothibo.com/2013/11/ruby-on-rails-inside-actiondispatch-and-rack/

+13

Aus der Beschreibung ist klar, dass er über 'Rake Middleware' Bescheid weiß. Er möchte dies für eine Nicht-Rails-App. –