2012-07-15 2 views
1

Sinatra 웹 앱을 개발 중입니다. 거기서 여러 URL을 표준화하고 절대화하려고합니다. 내가 관련 정보에 대한 ENV 오브젝트를 조사했지만 보인다랙 요청 내에서 HTTP 포트 확인

before do 
    @cached_request = Rack::Request.new(env) 
end 

def absolutize(path) 
    u = URI.parse('/%s' % path) # Ensure leading slash is there 
    u.scheme = @cached_request.scheme 
    u.host = @cached_request.host 
    u.port = @cached_request.port 
    u.to_s 
end 

그러나, 내 응용 프로그램이 포트 9393에서 실행중인 경우에도 SERVER_PORT 변수가 80을했습니다이를 위해, 나는 랙 :: Request 객체를 사용하고 있습니다 요청 포트에 대한 정보가 없다는 것입니다.

응용 프로그램 내에서이 코드를 어떻게 알아 내야하나요? 랙 사양의 변수에 대한 참조가 보이지 않습니다 ...

지금까지 Puma와 Webrick에서 랙 업 파일을 실행 해 보았습니다.

+0

Sinatra에서'request.port'를 호출하는 'request' 헬퍼를 사용해 보셨습니까? http://www.sinatrarb.com/intro#Accessing%20the%20Request%20Object를 참조하십시오. – iain

답변

1

좋습니다. 알아 냈습니다. 이것은 MarsEdit가 Host 헤더에 포트 접미어를 보내지 않기 때문에 MarsEdit을 통해 수행 된 요청에서만 발생합니다 (이는 거의 모든 랙 서버가 서버 포트를 유추하는 데 사용됩니다).

저는 Daniel에게 버그 보고서를 보냈습니다.