如何使用重新加载新内容而不是缓存的页面创建 Sinatra 应用程序

How to create Sinatra app with page that reloads with new content not cache

我正在尝试为模板和教学创建一个相当小的示例。

我创建 app.rb 文件

require 'sinatra'

get '/' do
  "Minimal!__ !_!"
end

我的 Gemfile 有

source 'https://rubygems.org'

gem 'rspec'
gem 'thin'

我启动了 Sinatra

$ ruby app.rb 
== Sinatra (v2.0.5) has taken the stage on 4567 for development with backup from Thin
Thin web server (v1.7.2 codename Bachmanity)
Maximum connections set to 1024
Listening on localhost:4567, CTRL+C to stop

我可以访问该页面

但是当我随后更改代码时,页面被缓存并且新内容不会显示,除非我停止并启动服务器。

我已经阅读了 Sinatra 文档,但仍然无法理解。

我试过添加

set :sessions, false

   cache_control :off

无果

您需要使用sinatra-reloader

根据示例代码,您的应用似乎属于 "classic" 类型。 因此,只需将 reloader 库加载到您的应用程序中:

require 'sinatra'
require 'sinatra/reloader' if development?

get '/' do
  "Minimal!__ !_!"
end

由于您使用的是 Gemfile,请确保您也列出了 sinatra-contrib gem(并通过 bundle install 安装):

source 'https://rubygems.org'

gem 'rspec'
gem 'thin'
gem 'sinatra', '~> 2.0`
gem 'sinatra-contrib', '~> 2.0'

否则直接安装gem:gem install sinatra-contrib

从现在起,只要您以 'development' 模式启动服务器并对您的 app.rbviews/index.erb 进行更改,这些更改将通过刷新反映在您的浏览器中.

如果您 遇到缓存问题,您可以告诉浏览器不要缓存任何内容:

cache_control :no_cache

您还可以将 Pragma 和 Expires 添加到 header:

headers \
  "Pragma"   => "no-cache",
  "Expires" => "0"

并将其全部放入 before 过滤器中:

before do
  cache_control :no_cache
  headers \
    "Pragma"   => "no-cache",
    "Expires" => "0"
end

或者,由于您正在进行演示,请打开浏览器的检查器并关闭缓存。 Chrome 和 Firefox 都有这个选项。

(OP 添加这个)一个电话的极简版本可能只是

  headers "Expires" => "0"

在问题中