Ottenere l'elenco dei middleware ordinata in un'applicazione cremagliera generica?
-
25-09-2019 - |
Domanda
La funzionalità che sto cercando è simile al comando rake middleware
in Rails, fatta eccezione per un'applicazione cremagliera generica.
Soluzione
Ciò restituirà un elenco di tutte le applicazioni a cremagliera (tra cui 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)
Altri suggerimenti
$ 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-dentro-actiondispatch-e-rack /
questo è attesa da tempo, so
qui c'è un filo bello , la risposta definitiva è l'ultimo post
AGGIORNAMENTO secondo il commento di Marc-Andre:
Il seguente è l'ultimo post di questo link
Rack non ha un meccanismo per questo e poiché non si aggiunge tutto il middleware via @middleware, Sinatra non può dire che cosa middleware viene utilizzato. Né possono rotaie, btw, si può solo dirvi che cosa è possibile. Middleware non deve essere una lista lineare (vale a dire quando si utilizza un router rack o qualcosa del genere).