2014-05-14 1 views
0

서버가 요청할 때 uuid 또는 시간을 요청해야합니다. Rails에서는 쉽지만, 나는 보석으로 작업하고 있으며 좀 더 일반적인 것으로하고 싶습니다. 그래서 Sinatra와 http 서버에서 작동하는 다른 모든 Ruby 응용 프로그램과도 함께 작업하고 싶습니다.Ruby 응용 프로그램에서 HTTP 요청 uuid 또는 요청 시작 시간

이것은 또 다른 문제입니다. 보석입니다. 내 응용 프로그램 컨트롤러의 시작에 Time.now을 넣을 수 없습니다. 나는 그것을 일반화해야하기 때문에 다른 프레임 워크와 함께 작동해야합니다.

무엇을 제안 하시겠습니까?

답변

1

실제 애플리케이션 프레임 워크와 독립적으로 사용할 수있는 랙 미들웨어를 구현할 수 있습니다 (Rails, Sinatra, Padriono 및 대부분의 다른 Ruby 웹 프레임 워크에서 사용되는 rack을 사용하는 경우).

레일에는 이미 ActionDispatch::RequestId의 요청에 고유 ID를 추가하기위한 미들웨어가 포함되어 있습니다. 또 다른 대안은 rack-request-id gem 일 수 있습니다. 당신은 다음 config.ru이 미들웨어를 사용할 수 있습니다

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

    def call(env) 
    env['request_id'] = env['HTTP_X_REQUEST_ID'] || SecureRandom.uuid 
    env['request_started_at] = Time.now 

    @app.call(env) 
    end 
end 

또는 레일에 application.rb이를 추가하여 :

config.middleware.use RequestIdMiddleware 
+0

하지만 내가 할 수있는을이 미들웨어의

최소한의 버전은 다음과 같이 수 Rails/Sinatra 앱에 침입하지 않고 사용하십시오. 모든 사용자가'config.ru'를 가지고있는 것은 아니며 Rails에서'config.middleware.use'를 사용해야합니다. Sinatra'use'에서 다른 프레임 워크는 어떻게됩니까? 제네릭 솔루션이 있습니까? – ciembor

+0

랙을 사용하는 모든 프레임 워크는 (내가 말했듯이 루비의 모든 웹 프레임 워크에 관한 것입니다) 추가 랙 미들웨어를 사용할 수 있습니다. 실제로 랙의 기본 기능 대부분은 랙 자체의 여러 미들웨어 클래스에 의해 제공됩니다. 따라서 랙 미들웨어 **는 일반적인 솔루션입니다. 실제 프레임 워크에서 미들웨어를 설정하는 방법은 다르지만, 결국 모든 프레임 워크가이를 사용할 수 있습니다. –