在sinatra获得绝对(基础)网址

时间:2010-06-01 13:41:09

标签: ruby sinatra haml

现在,我做了一个

get '/' do
  set :base_url, "#{request.env['rack.url_scheme']}://#{request.env['HTTP_HOST']}"
  # ...
  haml :index
end

能够在HAML index.haml中使用options.base_url。 但我确信有更好的,干的,这样做的方式。然而,我看不到,也找不到它。 (我是Sinatra的新手:))

不知何故,在获取之外,我没有request.env可用,或者看起来如此。因此将它放入包含中并不起作用。

你如何得到你的基本网址?

2 个答案:

答案 0 :(得分:35)

你可以使用request.base_url得到它= D(看看rack/request.rb

答案 1 :(得分:24)

一些事情。

  1. set是一个类级方法,这意味着您要使用每个请求修改整个应用程序的状态
  2. 以上是一个问题,因为可能的话,基本网址在不同的请求中可能会有所不同,例如http://foo.comhttps://foo.com,或者如果您有多个域使用DNS指向同一个应用服务器
  3. 更好的策略可能是定义帮助

    helpers do
      def base_url
        @base_url ||= "#{request.env['rack.url_scheme']}://#{request.env['HTTP_HOST']}"
      end
    end
    

    如果您需要在响应查询之外的基本URL(不在get / post / put / delete块或视图中),最好在某处手动设置它。