【问题标题】:Is it possible to include an unbuilt Rails Engine without using the Gemfile?是否可以在不使用 Gemfile 的情况下包含未构建的 Rails 引擎?
【发布时间】:2017-01-06 19:54:08
【问题描述】:

这可能是一个人为的问题,但我正在研究 Rails API 并希望保持 API 中间件堆栈最小,同时提供需要一些更复杂中间件的 OAuth 端点。我的想法是把它做成一个引擎,并将该引擎包含在应用程序中。

但是,我认为创建 Rails 引擎会比生成新引擎 gem 并将 gem 包含在我的 Gemfile 中更简单。有没有办法让... require 'lib/engines/my_engine'application.rb 或其他什么?我不应该只需要一个 gemspec 来包含一个未构建的引擎 - 我可以将所有依赖项放在主应用程序的 Gemfile 中。

我真正想做的只是为一小组路由获取一个单独的中间件堆栈!

【问题讨论】:

    标签: ruby-on-rails rails-engines rack-middleware


    【解决方案1】:

    我发现只要按照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 中以确保相邻的 @ 987654322@ 如果存在,将自动包含在内)。当然还有一个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

    【讨论】:

      猜你喜欢
      • 2016-07-27
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      • 1970-01-01
      • 2017-07-22
      相关资源
      最近更新 更多