Já no Edge Rails 3 (25/01) está assim:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
use ActionDispatch::Static use Rack::Lock use Rack::Runtime use Rails::Rack::Logger use ActionDispatch::ShowExceptions use ActionDispatch::Callbacks use ActionDispatch::Cookies use ActionDispatch::Session::CookieStore use ActionDispatch::Flash use ActionDispatch::Cascade use ActionDispatch::ParamsParser use Rack::MethodOverride use ActionDispatch::Head use ActiveRecord::ConnectionAdapters::ConnectionManagement use ActiveRecord::QueryCache run Class |
A mudança mais notável é que agora todos os middlewares que estavam no ActionController passaram para dentro do novo ActionDispatch. O primeiro middleware é para checar se estamos querendo um arquivo estático (no public) e faz sentido ele ser o primeiro, antes mesmo do Rack::Lock que coloca a execução da aplicação num bloco synchronized.
Em seguida o Rack::Runtime serve para colocar no header um “X-Runtime” para mostrar o tempo gasto na execução, em segundos. Do ActionDispatch o ShowExceptions serve para resgatar quaisquer exceções que acontecem na sua aplicação. Você pode escolher fazer alguma coisa com ela (por exemplo, com um “rescue_from” no controller).
Os próximos são bem óbvios: os before e after filters que colocamos nos controllers filtros como “to_prepare”, tratamento de cookies, session em cookie, mensagens no “flash”, opção de parar a execução em cascata do Rack, parser para o query string, o MethodOverride que “engana” o Rails quando um form dá Post com o campo “_method”, para verbos como “DELETE” e “PUT”, tratamento para o verbo “HEAD” e os middlewares para gerenciamento de conexão e query cache do ActiveRecord.
Você ainda pode configurar seus próprios middlewares ou inserí-los em qualquer lugar no meio da cadeia de execução padrão. Leia a seção Rails on Rack do Rails Guides oficial. Mas como exemplo, você precisa editar o arquivo *config/application.rb" e adicionar:
1 2 3 4 |
config.middleware Rack::SendFile config.middleware.insert_before ActionDispatch::ShowExceptions, Rack::Bug config.middleware.insert_after ActionDispatch::Head, Rack::ShowStatus config.middleware.swap Rails::Rack::Logger, Rack::Logger |
Baixe o código-fonte do Edge Rails:
1 2 3 4 5 |
git clone git://github.com/rails/rails.git cd rails git submodule init git submodule update gem bundle |
É muito interessante navegar pelo código fonte. Os Rack Middleware, por exemplo, você vai encontrar em “actionpack/lib/action_dispatch/middleware”. Dá para aprender muita coisa só de ler os códigos, especialmente agora que eles foram reorganizados.
O Rails 3 está praticamente batendo na porta.