2017-01-06 13 views
1

Это может быть немного надуманный вопрос, но я работаю над Rails API и хочу, чтобы минимальный уровень промежуточного программного обеспечения API был минимальным, предоставляя конечную точку OAuth, которая требует нескольких более сложных сред. Моя мысль заключалась в том, чтобы превратить его в двигатель и включить этот движок в приложение.Можно ли включить незастроенный Rails Engine без использования Gemfile?

Тем не менее, я думал, что будет проще создать Rails Engine, чем создать новый жемчуг двигателя и включить жемчужину в мой Gemfile. Есть ли способ просто ... require 'lib/engines/my_engine' от application.rb что ли? Мне не нужен gemspec, чтобы включить незастроенный движок - я могу поместить все зависимости в Gemfile основного приложения.

Действительно, все, что я пытаюсь сделать, это получить отдельный стек промежуточного программного обеспечения для небольшого набора маршрутов!

ответ

2

Я обнаружил, что двигатель может быть включен только, требуя его согласно Rails::Engine documentation:

убедитесь, что этот файл будет загружен в верхней части конфигурации/application.rb (или в Gemfile)

Так что я попытался это, и она работала:

application.rb:

# after Bundler.require(...) 
require_relative '../lib/engines/oauth_server/lib/oauth_server' 

Чтобы ответить на этот вопрос. И технически все, что требуется в этом случае, а не целая структура драгоценного камня, представляет собой файл в каталоге 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