2016-07-15 7 views
0

랙 미들웨어 자체 (RackWired)를 사용하는 랙 미들웨어 GEM을 만들려고합니다.랙 미들웨어의 랙 미들웨어?

config.ru의 Rack :: Builder를 사용하는 기존 응용 프로그램이 있습니다. 그 블록 (Rack :: Builder)에서, 나는 나의 미들웨어를 지정하고 싶습니다. 그리고 제 자신의 내부에서 제 3의 미들웨어 (rack-cors)를 사용하여 어떤 것을 할 때 호출됩니다. 나는 혼란 스럽다.

문제는 Rack :: Builder의 컨텍스트가 config.ru에 있고 내 미들웨어 (RackWired)가 제 3 자 미들웨어 ("랙 - 코")를 "사용"하기 위해 액세스 할 수 없다는 것입니다.

내 노력의 목적은 here

미들웨어에서 미들웨어를 사용하는 방법이있다?

난 당신이 뭘 하려는지 전혀 확실하지 않다, 당신이

답변

1

마우스 오른쪽 버튼으로 감사드립니다. 그러나이

class CorsWired 
    def initialize(app) 
    @app = app 
    end 

    def call(env) 
    cors = Rack::Cors.new(@app, {}) do 
     allow do 
     origins '*' 
     resource '*', :headers => :any, :methods => [:get, :post, :put, :options, :delete], :credentials => false 
     end 
    end 
    cors.call(env) 
    end 
end 

귀하의 config.ru하지 use CorsWired.new

이것은 당신이 요구하고 있었는지 생각하지만 난 당신이 미들웨어의 요점 있다고 생각하지만 use CorsWired을해야 할 수 있습니다. config.ru을 변경하여 원하는 작업에 따라 미들웨어의 전후에 랙 - 코어를 사용해야합니다.

require 'rack' 
require 'rack/cors' 
require './cors_wired'  

app = Rack::Builder.new do 
    use Rack::Cors do 
    allow do 
     origins '*' 
     resource '*', :headers => :any, :methods => [:get, :post, :put, :options, :delete], :credentials => false 
     end 
    end 
    use CorsWired 
    run lambda { |env| [200, {'Content-Type' => 'text/plain'}, ['OK']] } 
end 
run app 
+0

감사합니다. 제가 찾던 첫 번째 부분입니다. 나는 쉽게 후자를 할 수 있었지만 CORS에 대한 메타 구성을 추가하여 보석으로 가져 왔습니다. –

+0

Rack :: Cors.new (@app, {})를 초기화하지 않고 구문 오류가 발생하면 코드를 상세하게 작성합니다. blah blah end –