这可能是一个人为的问题,但我正在研究Rails API,并希望保持API中间件堆栈最小化,同时提供需要一些更复杂的中间件的OAuth端点。我的想法是把它变成一个引擎,并在应用程序中包含该引擎。
但是,我认为创建一个Rails引擎比创建一个新的引擎gem并在我的Gemfile中包含gem更容易。有没有办法从kmeans
或其他东西中...... require 'lib/engines/my_engine'
?我不需要gemspec只包含一个未构建的引擎 - 我可以将所有依赖项放在主应用程序的Gemfile中。
我真正想做的就是为一小组路线获得一个单独的中间件堆栈!
答案 0 :(得分:2)
我发现根据Rails::Engine documentation要求可以包含引擎:
确保此文件已加载到您的文件顶部 config / application.rb(或在你的Gemfile中)
所以我尝试了这个,它起作用了:
<强> application.rb中:强>
# after Bundler.require(...)
require_relative '../lib/engines/oauth_server/lib/oauth_server'
所以这回答了这个问题。从技术上讲,在这种情况下所需的全部内容,而不是整个gem结构,是lib
目录中的一个文件,其中包含一个继承自Rails :: Engine的类(它必须在lib
中确保如果存在,将自动包含相邻的app, config, vendor etc. directories。当然,如果您打算将此引擎用于任何事情,那么config/routes.rb
文件;)
例如,我的引擎(上面要求)看起来像这样:
module OauthServer
class Engine < ::Rails::Engine
middleware.use ActionDispatch::Cookies
middleware.use ActionDispatch::Session::CookieStore
middleware.use ActionDispatch::Flash
end
end
但是,我还发现Rails引擎似乎从它所包含的应用程序中继承了中间件,所以我回到原来的问题,有人之前已经问过这个问题:Build 2 middleware stacks in Rails app < / p>