Подтвердить что ты не робот

Получить упорядоченный список промежуточного программного обеспечения в общем приложении стойки?

Функциональность, которую я ищу, похожа на команду rake middleware в Rails, за исключением общего приложения стойки.

4b9b3361

Ответ 1

Это вернет список всех приложений стойки (включая промежуточное ПО):

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)

Ответ 2

> 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/

Ответ 3

Это давно назрело, я знаю

вот хороший поток, окончательный ответ - последнее сообщение

ОБНОВЛЕНО в комментарии Marc-Andre:

Ниже приведен последний пост из ссылка

У стойки нет механизма для этого, и поскольку не все промежуточное ПО добавляется через @middleware, Sinatra не может сказать вам, какое промежуточное программное обеспечение используется. Также нет рельсов, кстати, это может просто сказать вам, что возможно. Среднее ПО не обязательно должно быть линейным списком (т.е. При использовании маршрутизатора Rack или чего-то еще).