Проблема с кэшированием при развертывании приложения flask с SQLite на движке Google App - PullRequest
0 голосов
/ 09 апреля 2020

Я новорожденный на движке облачных приложений Google :), я развертываю свое веб-приложение flask в Google App Engine, и все из GAE выглядит хорошо, но когда пользователь обращается к приложению, возникает проблема. до сих пор выглядит для меня проблемой кеширования (надеюсь, кто-нибудь поможет мне сойти с ума)

Описание проблемы: Любое действие, которое требуется пользователю для получения данных со стороны сервера. пользователь должен обновить страницу sh, чтобы перезагрузить изменения (иногда пользователь нажимает refre sh более 3 раз). Кроме того, после объекта ex (таблица), загруженного данными, полученными с сервера, если пользователь нажимает снова, обновляет страницу. страница загружается как и прежде, чем предпринимается какое-либо действие. И так при перезагрузке страницы, показывающей последнюю загрузку другой страницы со старым содержимым.

Что я делал до этого момента:

Я обновляю свой app.yaml, чтобы он был таким, как показано ниже:

runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app

default_expiration: "2s"

env_variables:
  GOOGLE_APPLICATION_CREDENTIALS: 'vizionflow-5b8735ce1d20.json'

handlers:
- url: /static/css
  static_dir: static/css/
  expiration: '10s'

- url: /static/js
  static_dir: static/js/
  expiration: '5m'

error_handlers:
  - file: error_nopage.html

Также я попытался добавить на

@app.after_request
def add_header(r):
    """
    Add headers to both force latest IE rendering engine or Chrome Frame,
    and also to cache the rendered page for 10 minutes.
    """
    r.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
    r.headers["Pragma"] = "no-cache"
    r.headers["Expires"] = "0"
    r.headers['Cache-Control'] = 'public, max-age=0'
    return r

Спасибо всем, кто мог помочь даже с Идеями :)

1 Ответ

1 голос
/ 12 апреля 2020

Вы проверяли, действительно ли ответ возвращает заголовки, которые вы устанавливаете в Python? IIR C это не сработало для меня, так как AppEngine каким-то образом переопределяет их, поэтому мне пришлось вместо них установить app.yaml, например:

handlers:
  - url: /my/route
    script: auto
    secure: always
    http_headers:
      Cache-Control: no-cache
...