Rack :: ResponseHeaders在Sinatra的机架中

时间:2010-05-25 12:21:43

标签: sinatra heroku rack

我认为这是一个非常简单的问题,但我似乎无法做到这一点。基本上,我正在尝试使用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)已安装。我将从调查开始。

1 个答案:

答案 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小时 - 即静态资产。