2010-05-25 120 views
1

我认为这是一个非常容易的,但我似乎无法做到正确。基本上,我试图使用Rack中间件将默认的Cache-Control标头设置为由我的Sinatra应用程序提供的所有响应。它看起来像机架:: responseHeaders响应应该能够做的正是我需要的,但我得到尝试使用语法时的错误在我rackup文件证明hereRack :: ResponseHeaders用于Sinatra

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

我能得到机架::缓存成功的工作方式如下:

use Rack::Cache, 
    :default_ttl => 3600 

不过,这并不能达到完全是我想要的输出,而机架:: responseHeaders响应给出了头的细粒度控制。

仅供参考,我的网站托管在Heroku上,并且在我的.gems清单中指定了所需的Rack Gems。

谢谢!

更新:做一些研究之后,它看起来像第一个问题是,机架:: responseHeaders响应并不在其中安装机架的contrib(0.9.2)的版本中。我会先看看。

回答

5

如果有人有兴趣,我能够得到这个工作。它看起来并不像会有安装在Heroku rack-contrib-0.9.3一个简单的方法,但我唯一需要的文件是response_headers.rb,所以我简单地复制这个到我的项目目录,并编辑我rackup如下:

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 –中指定明确的缓存控制标题(即静态资产)的对象设置1小时的默认最大期限。

相关问题