我认为这是一个非常简单的问题,但我似乎无法做到这一点。基本上,我正在尝试使用Rack中间件将默认的Cache-Control标头设置为我的Sinatra应用程序提供的所有响应。看起来Rack :: ResponseHeaders应该能够完全满足我的需求,但是当我尝试在我的rackup文件中使用演示here的语法时出现错误:
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 gems在我的.gems清单中指定。
谢谢!
更新: 在做了一些研究后,看起来第一个问题是在rack-contrib版本中找不到Rack :: ResponseHeaders( 0.9.2)已安装。我将从调查开始。
答案 0 :(得分:5)
如果有人感兴趣,我能够让这个工作。它看起来不像是在Heroku上安装rack-contrib-0.9.3
的简单方法,但我需要的唯一文件是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标头的对象设置默认的最大年龄1小时 - 即静态资产。