1

我正在开发一个 Sinatra 网络应用程序,我想在那里规范化和绝对化许多 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 服务器都使用它来推断服务器端口)。

我已经联系 Daniel 并提交了错误报告。

于 2012-07-15T14:25:46.263 回答