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

问题描述 投票:1回答:2

我试图为模板和教学创建一个相当小的例子。

我创建了我的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

我可以访问该页面

enter image description here

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

我已阅读Sinatra文档,但仍无法弄明白。

我试过添加

set :sessions, false

   cache_control :off

无济于事

ruby caching sinatra browser-cache
2个回答
1
投票

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

cache_control :no_cache

您还可以在标题中添加Pragma和Expires:

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"

在有问题的范围内


1
投票

你需要使用sinatra-reloader

根据示例代码,您的应用似乎是“经典”类型。因此,只需将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进行更改,这些更改将在您的浏览器中反映出来并进行刷新。

© www.soinside.com 2019 - 2024. All rights reserved.