2011-01-27 10 views
7

かなり単純なアプリケーション(ちょうどindex.htmlファイルとcssファイル - これはちょうど静的なページです)がHerokuでホストされています。HerokuでホストされているSinatraアプリでHTTP応答(キャッシュ)ヘッダーを設定する方法

私はHerokuでSinatraを使用してホストしています。 「アプリ」自体はかなりシンプルです。

require 'rubygems' 
require 'sinatra' 

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

質問:静的資産のHTTP応答ヘッダーを設定するにはどうすればよいですか?特に、キャッシングの目的でExpiresヘッダーを設定したかったのです。

編集:私は(背景画像、アイコンなどのように、すなわち、/publicの下にある1)静的な資産に前記ヘッダを追加しているよ

答えて

16

別に事実から、私はしないこと静的ファイルを処理するためにSinatraスタックを通過する場合は、

cache_control :public, max_age: 60 

を1分間キャッシュします。 cache_controlhelper that comes with Sinatraです。

そうでなければ、http://www.sinatrarb.com/configuration.htmlを見て、Sinatraがどのように設定されているかを確認して、静的ファイルを処理する必要はありません。

これが役に立ちます。

編集:私はあなたが明示的にExpiresヘッダーを要求しているのを見ました。私は確信していませんが、それはちょうどCache-Controlと同じ方法でなければなりません。混乱して申し訳ありません

+0

はどのようにあなたがそれを行うだろうか?私はまだそれがHerokuで開催されることを望んでいると仮定します。 – ryanprayogo

+0

Herokuは彼らの文書(http://docs.heroku.com/http-cachingを参照)で 'Cache-Control'を提案し、そこにHeadhunterがホストされていることに注意してください。私は 'response ['Expires'] ='を使用します。 'Expires'は絶対時間で指定されていることに注意してください(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21) – awendt

+1

Sinatraは実際にはこのために特にヘルパーを持っています: 'cache_control:public、:max_age => 60' –

5

@ awendtの答えを拡張すると、Sinatraは経路を明示的に定義してファイルを印刷する必要がなく、静的ファイルを実際に処理できます。追加することにより

set :static, true 

..youはあなたのindex.htmlstylesheet.csspublic/フォルダに追加することができます。その後、http://localhost:9292/stylesheet.cssにアクセスすると、静的ファイルが提供されます。

あなたが試行し、代わりにデフォルトpublic/の、別のフォルダ名を使用する場合:私たちはあまり明示的にしたい場合は、私たちはただシナトラが可能になるという知識でpublic/フォルダを作成することができます

set :public, "your_folder_name" 

とにかく:)私たちのために:static

出典:http://www.sinatrarb.com/configuration.html#__enabledisable_static_file_routes

関連する問題