1

私は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ファイルを実行してみました。

4

1 に答える 1

1

わかりました。これは、MarsEditがヘッダーでポートサフィックスを送信しないため、MarsEditを介して行われたリクエストでのみ発生しますHost(これは、ほとんどすべてのRackサーバーがサーバーポートを推測するために使用するものです)。

バグレポートでダニエルに連絡しました。

于 2012-07-15T14:25:46.263 に答える