Ruby 如何在Heroku上托管的Sinatra应用程序中设置HTTP响应(缓存)头
我有一个相当简单的应用程序(只有一个Ruby 如何在Heroku上托管的Sinatra应用程序中设置HTTP响应(缓存)头,ruby,caching,http-headers,heroku,sinatra,Ruby,Caching,Http Headers,Heroku,Sinatra,我有一个相当简单的应用程序(只有一个index.html文件和一个css文件——它实际上只是一个静态页面)托管在Heroku上 我用Sinatra在Heroku上主持。“应用程序”本身相当简单: require 'rubygems' require 'sinatra' get "/" do File.read(File.join('public', 'index.html')) end 问题是,如何为静态资产设置HTTP响应头?特别是,我想设置Expires头以进行缓存 编辑:我希望
index.html
文件和一个css文件——它实际上只是一个静态页面)托管在Heroku上
我用Sinatra在Heroku上主持。“应用程序”本身相当简单:
require 'rubygems'
require 'sinatra'
get "/" do
File.read(File.join('public', 'index.html'))
end
问题是,如何为静态资产设置HTTP响应头?特别是,我想设置Expires
头以进行缓存
编辑:我希望将上述标题添加到静态资产中(即,位于
/public
下的标题,如背景图像、图标等)除了我不会通过Sinatra堆栈来提供静态文件之外,您可以调用
cache_control :public, max_age: 60
缓存一分钟<代码>缓存控制是一个简单的操作
否则,我建议您看看Sinatra是如何设置的,这样您就不用处理静态文件了
希望这有帮助
编辑:我刚才看到您明确要求使用
Expires
标题。我不确定,但这应该与缓存控制
的方式完全相同。很抱歉造成混淆作为对@awendt答案的扩展,Sinatra实际上可以处理静态文件,而无需显式定义路由和打印文件
加入:
set :static, true
…您可以将index.html
和stylesheet.css
添加到public/
文件夹中。然后当您访问http://localhost:9292/stylesheet.css
将为您提供静态文件
如果要使用其他文件夹名称,而不是默认的public/
,请尝试:
set :public, "your_folder_name"
如果我们想不那么明确,我们可以创建public/
文件夹,因为Sinatra将为我们启用:static
:)
来源:那么你会怎么做?假设我仍然希望它托管在Heroku上。请注意,Heroku在他们的文档中建议
缓存控制
(请参阅),而Headhunter则托管在那里。我会使用响应['Expires']=
。请注意,Expires
被指定为绝对时间,与请求无关()Sinatra实际上有一个专门用于此的助手:cache\u control:public,:max\u age=>60
@bjeanes谢谢,我已经更新了答案。这至少从1.0开始就存在了:)