簡體   English   中英

是否可以在不使用 Gemfile 的情況下包含未構建的 Rails 引擎?

[英]Is it possible to include an unbuilt Rails Engine without using the Gemfile?

這可能是一個人為的問題,但我正在研究 Rails API 並希望將 API 中間件堆棧保持在最低限度,同時提供需要一些更復雜的中間件的 OAuth 端點。 我的想法是將它變成一個引擎,並將該引擎包含在應用程序中。

但是,我認為創建 Rails 引擎比生成新引擎 gem 並將 gem 包含在我的 Gemfile 中更簡單。 有沒有辦法只...從application.rb或其他東西中require 'lib/engines/my_engine' 我不應該僅僅為了包含一個未構建的引擎而需要 gemspec - 我可以將所有依賴項放在主應用程序的 Gemfile 中。

我真正想做的就是為一小組路由獲得一個單獨的中間件堆棧!

我發現只要按照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 個中間件堆棧

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM