2010-06-01 81 views
17

绝对(基地)网址现在,我做了获取西纳特拉

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可用,或者看起来如此。所以把它放入包含中并不起作用。

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

+0

如何为'options.base_url'不会干怎么做呢? – Adrian 2010-06-01 14:48:12

回答

24

有几件事。

  1. set是一类电平的方法,这意味着你与每个请求
  2. 上述修改整个应用程序的状态被一个问题,因为潜在地,基本URL可能是在不同的请求不同,例如http://foo.comhttps://foo.com或如果您在使用DNS

多个域名指向同一个应用服务器更好的策略可能会定义一个辅助

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

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

+0

谢谢。我读到了关于助手的信息,但没有深入到深入探讨。谢谢。看起来答案在那里:) – berkes 2010-06-02 12:55:20

34

可以使用request.base_url太= d(看看rack/request.rb

+2

这看起来像是最好的方式,因为源代码基本上做了其他答案建议手动执行的操作,并且重要地包括端口(如果它是非默认的 – stujo 2015-10-14 22:57:43