2010-06-01 11 views
17

Teraz robięUzyskaj absolutną (baza) url w Sinatra

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

aby móc korzystać options.base_url w index.haml haml. Ale jestem pewien, że jest o wiele lepszy, SUCHY, sposób robienia tego. Jednak nie widzę ani nie znajduję. (Jestem nowy w Sinatrze :))

Jakoś poza uzyskać, nie mam request.env dostępne, lub tak się wydaje. Umieszczenie go w pliku włączającym nie działało.

Jak uzyskać swój bazowy adres URL?

+0

Jak to 'nie options.base_url' suchym? – Adrian

Odpowiedz

24

Kilka rzeczy.

  1. set to metoda poziom klasy, co oznacza, że ​​są modyfikowanie całego aplikacji stan z każdym żądaniem
  2. Powyższe jest problem, ponieważ potencjalnie bazowy adres URL może być różny na różnych wniosków, np http://foo.com i https://foo.com lub jeśli masz wiele domen wskazał na tym samym serwerze aplikacji za pomocą DNS

lepszym taktyka może być określenie pomocnika

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

Jeśli potrzebujesz adresu bazowego poza odpowiadaniem na zapytania (nie w bloku get/post/put/delete lub widoku), lepiej ustawić go gdzieś ręcznie.

+0

Dzięki. Czytałem o pomocnikach, ale nie dostałem się na tyle daleko, aby zanurzyć się w tym głęboko. Dzięki. Wydaje się, że odpowiedź była tam :) – berkes

34

Można go pobrać za pomocą request.base_url też = D (przyjrzeć rack/request.rb)

+2

To wygląda na najlepszy sposób, ponieważ kod źródłowy w zasadzie robi to, co sugeruje inna odpowiedź ręcznie i WAŻNE obejmuje port opcjonalnie, jeśli nie jest domyślny – stujo