Die Funktionalität, die ich suche, ist ähnlich dem rake middleware
Befehl in Rails, mit Ausnahme einer generischen Rack-Anwendung.Get ordered Liste der Middleware in einer generischen Rack-Anwendung?
Antwort
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)
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).
-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. –
> 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/
Aus der Beschreibung ist klar, dass er über 'Rake Middleware' Bescheid weiß. Er möchte dies für eine Nicht-Rails-App. –
+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;) –