1

これは非常に簡単だと思いますが、正しく理解できないようです。基本的に、Rack ミドルウェアを使用して、Sinatra アプリが提供するすべての応答にデフォルトの Cache-Control ヘッダーを設定しようとしています。Rack::ResponseHeaders は必要なことを正確に実行できるように見えますが、ラックアップ ファイルでここに示されている構文を使用しようとするとエラーが発生します。

use Rack::ResponseHeaders do |headers|
    headers['X-Foo'] = 'bar'
    headers.delete('X-Baz')
end

次のように、Rack::Cache を正常に動作させることができました。

use Rack::Cache,
    :default_ttl => 3600

ただし、Rack::ResponseHeaders ではヘッダーをきめ細かく制御できますが、これでは希望どおりの出力が得られません。

参考までに、私のサイトは Heroku でホストされており、必要な Rack gem は .gems マニフェストで指定されています。

ありがとう!

更新:いくつかの調査を行った結果、最初の問題は、インストールされた Rack-contrib (0.9.2) のバージョンで Rack::ResponseHeaders が見つからないことのようです。それを調べることから始めます。

4

1 に答える 1

5

誰かが興味を持っている場合に備えて、私はこれを機能させることができました。rack-contrib-0.9.3Heroku に簡単にインストールする方法はないように見えましたが、必要なファイルは だけだったresponse_headers.rbので、これをプロジェクト ディレクトリにコピーし、ラックアップを次のように編集しました。

require 'rack/contrib/response_headers'

# set default cache-control header if not set by Sinatra
use Rack::ResponseHeaders do |headers|
    if not headers['Cache-Control']
        headers['Cache-Control'] = "public, max-age=3600"
    end
end

これにより、Sinatra で明示的な Cache-Control ヘッダーを指定していないオブジェクト、つまり静的アセットに対して、デフォルトの max-age が 1 時間に設定されます。

于 2010-05-27T12:16:26.980 に答える