4

Rails3gemfileのgemがどのようにしてミドルウェアをRackスタックに自動的に追加できるかを調べようとしています。私はその宝石のフックを探しています。たとえば...私がdevisegemをRails3gemfileに追加すると、deviseはどういうわけかRackスタックのミドルウェアとしてwardenを追加します。これは自動的に機能するようです。Rails3アプリではこれ以上の構成は必要ありません。boot.rbから自動的に特別なクラス/メソッドが呼び出されると思います。このプロセスが実際にどのように機能するかについてのヒントはありますか?

4

3 に答える 3

9

Railtieを使用する必要があります。実際、これはRails::Railtieのドキュメントに記載されているまさにその例です。

class MyRailtie < Rails::Railtie
  initializer "my_railtie.configure_rails_initialization" do |app|
    app.middleware.use MyRailtie::Middleware
  end
end
于 2012-04-13T15:36:08.203 に答える
8

ミドルウェアをgemに挿入するには、ミドルウェアをgemのエンジンに追加する必要があります。

lib/gem_name/engine.rb

require 'rails'

module GemName
  class Engine < Rails::Engine

    config.app_middleware.insert_before(Warden::Manager, Rack::OpenID)

  end
end
于 2011-08-01T16:20:04.623 に答える
3

これは、gem /プラグインがミドルウェアにどのように接続するかを正確に示すものではありませんが、これを行う方法です。これに基づいて、gem/pluginは同じことを実行できます。

ミドルウェアを挿入するには、これを初期化ファイルで実行できます。

ActionController::Dispatcher.middleware.insert_before(ActionController::Base.session_store, FlashSessionCookieMiddleware, ActionController::Base.session_options[:key])

上記は、session_storeラックがロードされる前にFlash Cookieミドルウェア(カスタムコード)を挿入します。

独自のミドルウェアを表示するには、rakeミドルウェアを実行します

use Rack::Lock
use ActionController::Failsafe
use FlashSessionCookieMiddleware, "_xxxxxx_session"
use ActionController::Session::CookieStore, #<Proc:0x00000001037d4f20@(eval):8>
use ActionController::ParamsParser
use Rack::MethodOverride
use Rack::Head
use ActionController::StringCoercion
use ActiveRecord::ConnectionAdapters::ConnectionManagement
use ActiveRecord::QueryCache
run ActionController::Dispatcher.new
于 2010-07-26T13:05:22.387 に答える