2017-01-06 8 views
1

이것은 약간의 고의적 인 질문 일지 모르지만 레일스 API에서 작업 중이며 API 미들웨어 스택을 최소한으로 유지하면서 좀 더 복잡한 미들웨어가 필요한 OAuth 끝점을 제공하려고합니다. 내 생각은 그것을 엔진으로 만들고 해당 엔진을 응용 프로그램에 포함시키는 것이 었습니다.Gemfile을 사용하지 않고 빌드되지 않은 레일스 엔진을 포함 할 수 있습니까?

그러나 새로운 엔진 젬을 생성하고 내 Gemfile에 젬을 포함시키는 것보다 레일스 엔진을 만드는 것이 더 쉬운 방법이라고 생각했습니다. 그냥 방법이 있나요 ... require 'lib/engines/my_engine'application.rb 또는 뭔가? 나는 unbuilt 엔진을 포함하기 위해 gemspec을 필요로하지 않아야한다 - 나는 주 앱의 Gemfile에 모든 의존성을 넣을 수있다.

정말로 내가하려는 것은 작은 경로 집합을위한 별도의 미들웨어 스택을 얻는 것입니다!

답변

2

난 그냥 당을 요구함으로써 엔진 포함 할 수 있다는 것을 발견 한 Rails::Engine documentation :

이 파일이 사용자의 설정/application.rb의 상단에로드 (또는으로되어 있는지 확인하여 Gemfile은)

그래서 나는 이것을 시도, 그것은 일 :

application.rb :

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

그래서이 질문에 답합니다. 그리고 기술적으로는 전체 gem 구조체가 아닌이 경우에 필요한 것은 Rails :: Engine으로부터 상속받은 클래스를 포함하는 lib 디렉토리의 파일입니다 (인접한 app, config, vendor etc. directories이 자동으로 포함되도록하려면 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 엔진은 미들웨어가 포함 된 응용 프로그램에서 상속 된 것으로 보이므로 이전에 이미 질문했던 원래 질문으로 돌아갑니다. Build 2 middleware stacks in Rails app