Pergunta

A funcionalidade que procuro é semelhante ao rake middleware comando em trilhos, exceto para um aplicativo genérico de rack.

Foi útil?

Solução

Isso retornará uma lista de todos os aplicativos de rack (incluindo 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)

Outras dicas

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

Isso está muito atrasado, eu sei

Aqui está um bom tópico, a resposta definitiva é o último post

Atualizado conforme o comentário de Marc-Andre:

O seguinte é o último post deste link

O rack não possui um mecanismo para isso e, como nem todo middleware é adicionado via @middleware, o Sinatra não pode dizer qual middleware é usado. Nem os trilhos, aliás, isso pode apenas dizer o que é possível. O Middleware não precisa ser uma lista linear (ou seja, ao usar um roteador de rack ou algo assim).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top