我发现只要按照Rails::Engine 文档要求它就可以包含一个引擎:
确保此文件加载到 config/application.rb 的顶部(或 Gemfile 中)
所以我尝试了这个,它奏效了:
应用程序.rb:
# after Bundler.require(...)
require_relative '../lib/engines/oauth_server/lib/oauth_server'
所以这就回答了这个问题。从技术上讲,这种情况下所需的所有内容,而不是整个 gem 结构,是一个lib
目录中的文件,该文件包含一个从 Rails::Engine 继承的类(它必须在lib
其中以确保相邻的应用程序、配置、供应商等)。如果存在目录将自动包含在内)。当然,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 引擎似乎继承了它所包含的应用程序的中间件,所以我回到我原来的问题,之前有人已经问过这个问题:在 Rails 应用程序中构建 2 个中间件堆栈