我试图找出 Rails 3 gemfile 中的 gem 如何自动将中间件添加到 Rack 堆栈。我正在寻找那颗宝石中的钩子。例如......当我将设计 gem 添加到我的 Rails 3 gemfile 时,然后设计以某种方式将warden 作为中间件添加到 Rack 堆栈上。这似乎是自动工作的。Rails 3 应用程序无需进一步配置。我想boot.rb会自动调用一个特殊的类/方法。任何提示这个过程如何真正起作用?
问问题
4259 次
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/plugin 是如何连接到中间件的,但这就是你可以做到的。基于此,gem/plugin 可以做同样的事情:
要插入中间件,您可以在初始化文件中运行它。
ActionController::Dispatcher.middleware.insert_before(ActionController::Base.session_store, FlashSessionCookieMiddleware, ActionController::Base.session_options[:key])
上面会在 session_store rack 加载之前插入一个 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 回答