Как создать приложение Sinatra со страницей, которая перезагружается с новым контентом, а не с кешем - PullRequest
1 голос
/ 09 апреля 2019

Я пытаюсь создать довольно минимальный пример для шаблонов и обучения.

Я создаю app.rb файл

require 'sinatra'

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

Мой Gemfile просто имеет

source 'https://rubygems.org'

gem 'rspec'
gem 'thin'

Я запустил Синатру

$ 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

безрезультатно

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Если у вас были проблемы с кешем, вы можете указать браузеру ничего не кешировать:

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 голос
/ 09 апреля 2019

Вам нужно использовать sinatra-reloader

Судя по примеру кода, ваше приложение относится к классическому типу. Поэтому просто загрузите библиотеку reloader в свое приложение:

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

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

Поскольку вы используете Gemfile, убедитесь, что у вас также есть указанный в списке sinatra-contrib гем (и установите его через bundle install):

source 'https://rubygems.org'

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

В противном случае установите драгоценный камень напрямую: gem install sinatra-contrib

Теперь при каждом запуске сервера в режиме 'development' и внесении изменений либо в app.rb, либо в views/index.erb, эти изменения будут отображены в вашем браузере с обновлением.

...