Ruby Sinatra-如何获取服务器';s域名

Ruby Sinatra-如何获取服务器';s域名,ruby,sinatra,domain-name,Ruby,Sinatra,Domain Name,我正试图在我的Sinatra应用程序中获得域名,但作为一名新手,我真的很难想出如何做到这一点,我知道这一定是可能的 Rack::Request#host_with_port看起来很有希望,但我不知道如何从我的应用程序中获取它-如何从我的Ruby代码中的Rack获取内容 或者还有其他方法吗?我想我真的不想每次请求发生时都这样做(虽然这不是很糟糕),但我认为如果在应用程序加载时只做一次会更好 有什么提示吗?看看: request.env.inspect 因此,您可以看到所有的请求环境变量 我想你在

我正试图在我的Sinatra应用程序中获得域名,但作为一名新手,我真的很难想出如何做到这一点,我知道这一定是可能的

Rack::Request#host_with_port
看起来很有希望,但我不知道如何从我的应用程序中获取它-如何从我的Ruby代码中的Rack获取内容

或者还有其他方法吗?我想我真的不想每次请求发生时都这样做(虽然这不是很糟糕),但我认为如果在应用程序加载时只做一次会更好

有什么提示吗?

看看:

request.env.inspect
因此,您可以看到所有的请求环境变量

我想你在找我

request.env["SERVER_NAME"]

只需在代码中使用
request.host

get  "/" do
  puts request.host #=> localhost
end

酷:)谢谢,这帮助了我,让我了解了一些关于请求的知识-我没有意识到Sinatra请求类继承自Rack请求-我想知道env属性来自哪里!您还可以使用request.env[“SERVER\u PORT”]和request.env[“PATH\u INFO”]来获取端口号和路径,或者使用request.env[“request\u URI”]来获取整个URI。谢谢:)这肯定会起作用-我可能会将request.host\u与\u PORT一起使用,由于我也需要端口号——我仍然想知道是否需要为每个请求都这样做——是否没有办法在应用程序中只做一次?好的,每个请求都会生成请求对象。因此,对整个应用程序执行一次是不可能的。不过,您可以使用before过滤器来保存重复编码。对于before筛选器,可以使用
before{$Host\u with_port=request.Host\u with_port}