2010-06-01 92 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