私はSinatraWebアプリを開発しており、そこでいくつかのURLを正規化および絶対化したいと考えています。このために、私はRack::Requestオブジェクトを使用しています。
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ファイルを実行してみました。