2011-01-27 8 views
7

Mam dość prostą aplikację (tylko jeden plik index.html i plik css - to naprawdę jest tylko statyczna strona) hostowany na Heroku.Jak ustawić nagłówki odpowiedzi HTTP (pamięci podręcznej) w aplikacji Sinatra hostowanej na Heroku

Używam Sinatry do hostowania go na Heroku. Sama "aplikacja" jest dość prosta:

require 'rubygems' 
require 'sinatra' 

get "/" do 
    File.read(File.join('public', 'index.html')) 
end 

Pytanie brzmi, w jaki sposób ustawić nagłówek odpowiedzi HTTP dla zasobów statycznych? W szczególności chciałem ustawić nagłówek Expires dla celów buforowania.

EDIT: szukam dodanie nagłówka do aktywów statycznych (czyli ten, który mieszka pod /public, jak obrazy tła, ikon, itp)

Odpowiedz

16

Pomijając fakt, że nie będę przechodzisz przez stos Sinatra tylko po to, aby wyświetlać pliki statyczne, możesz wywołać pamięć podręczną przez minutę, aby wywołać pamięć podręczną. cache_control to helper that comes with Sinatra.

W przeciwnym razie proponuję zapoznać się z http://www.sinatrarb.com/configuration.html, aby zobaczyć, jak skonfigurowano Sinatrę, aby nie zajmować się obsługą plików statycznych.

Mam nadzieję, że to pomoże.

edytuj: Właśnie widziałem, że wyraźnie prosiłeś o nagłówek Expires. Nie jestem pewien, ale to powinno wyglądać tak samo, jak Cache-Control. Przepraszamy za zamieszanie.

+0

Jak to zrobić wtedy? Zakładając, że nadal chcę go hostować na Heroku. – ryanprayogo

+0

Zauważ, że Heroku sugeruje "Cache-Control" w swoich dokumentach (zobacz http://docs.heroku.com/http-caching), a Headhunter jest tam hostowany. Użyłbym 'response ['Expires'] ='. Zauważ, że 'Expires' jest określona jako czas bezwzględny, nie w stosunku do żądania (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21) – awendt

+1

Sinatra ma rzeczywiście pomocnika specjalnie dla tego : 'cache_control: public,: max_age => 60' –

5

Jako rozszerzenie odpowiedzi @ awendt, Sinatra może w rzeczywistości obsługiwać pliki statyczne bez potrzeby jawnego definiowania trasy i drukowania pliku.

Dodając:

set :static, true 

..you można dodać index.html i stylesheet.css do folderu public/. Następnie po odwiedzeniu http://localhost:9292/stylesheet.css otrzymasz plik statyczny.

Jeśli chcesz użyć innej nazwy folderu, zamiast domyślnego public/, a następnie spróbuj:

set :public, "your_folder_name" 

Jeśli chcemy być mniej wyraźne możemy po prostu utworzyć folder public/ ze świadomością, że Sinatra pozwoli :static dla nas w każdym razie :)

Źródło:http://www.sinatrarb.com/configuration.html#__enabledisable_static_file_routes

Powiązane problemy