2012-07-15 49 views
1

我正在開發Sinatra Web應用程序,並且希望規範化和絕對化一些URL。對於這一點,我使用的是機架:: Request對象:確定機架請求中的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.我已經檢查了相關信息的ENV對象,但它似乎它沒有得到有關請求端口的任何信息。

我該如何從應用程序中找出這個問題?我沒有看到機架規格中的變量的參考...

到目前爲止,我已經嘗試在Puma和Webrick上運行rackup文件。

+0

您是否嘗試過從Sinatra內部的'request' helper例如調用'request.port'?請參閱http://www.sinatrarb.com/intro#Accessing%20the%20Request%20Object – iain 2012-07-15 13:58:16

回答

1

好吧我想通了。這隻發生在通過MarsEdit完成的請求中,這是因爲MarsEdit不會在Host標頭中發送端口後綴(這是幾乎所有Rack服務器用來推斷服務器端口的)。

我已經聯繫丹尼爾與bugreport。