【问题标题】:Updating browser cache on flask更新烧瓶上的浏览器缓存
【发布时间】:2021-03-24 03:23:59
【问题描述】:

我有一个小型烧瓶服务器,主要用于试验和开发自用工具(在我的家庭网络上)。它在树莓派机器上以开发模式运行。它被配置为通过rc.local启动时启动:

sudo -H -u pi /home/pi/Server/start.sh &

start.sh 文件读取

#!/bin/bash

cd /home/pi/Server
source /home/pi/Server/venv/bin/activate
export FLASK_APP=/home/pi/Server/app.py
export FLASK_ENV=development
export FLASK_RUN_HOST=192.168.1.104
export FLASK_RUN_PORT=5001

flask run

最初几天一切正常,但现在我收到以下错误:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/flask/app.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/lib/python3/dist-packages/flask/app.py", line 2295, in wsgi_app
    response = self.handle_exception(e)
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1741, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python3/dist-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/usr/lib/python3/dist-packages/flask/app.py", line 2291, in wsgi_app
    ctx.push()
  File "/usr/lib/python3/dist-packages/flask/ctx.py", line 377, in push
    self.app, self.request
  File "/usr/lib/python3/dist-packages/flask/sessions.py", line 343, in open_session
    data = s.loads(val, max_age=max_age)
  File "/usr/lib/python3/dist-packages/itsdangerous.py", line 643, in loads
    .unsign(s, max_age, return_timestamp=True)
  File "/usr/lib/python3/dist-packages/itsdangerous.py", line 466, in unsign
    return value, self.timestamp_to_datetime(timestamp)
  File "/usr/lib/python3/dist-packages/itsdangerous.py", line 404, in timestamp_to_datetime
    return datetime.utcfromtimestamp(ts + EPOCH)
OverflowError: timestamp out of range for platform time_t

据我所知here 这是浏览器缓存的问题。我怎样才能告诉烧瓶来处理这个?

【问题讨论】:

  • 在 Windows 上按 Ctrl+Shift+R(不确定 Mac 是什么)
  • 您好,感谢您的建议。这行不通。不管。我几乎不相信这是正确的解决方案。一般来说,无论用户缓存是否更新,网页都应该加载。

标签: python flask caching


【解决方案1】:

看起来您正在使用会话/cookie?尝试调查一下,也许日期不正确或无效。尝试清除它session.clear() 或使用更短的到期日期。从 python 2 升级到 3 后,我也遇到了一些问题,这会弄乱 cookie,如果你这样做了,你需要清除缓存,以便可以设置 python3 日期/时间 cookie。

【讨论】:

  • 您好,感谢您的建议。我应该把它放在哪里?
  • 你的意思是 session.clear() ?通常在程序开始之前设置任何会话。
【解决方案2】:

当从 Adafruit CircuitPython NTP issue 返回的时间为 0 时,这似乎是一个错误。一种直接的方法是使用 PR 修补一些烧瓶依赖项。

但是,这似乎更多是您的缓存年龄错误。尽量缩短时间

@app.after_request
def after_request(response):
    response.headers["Cache-Control"] = "max-age=300" # in second
    return response

【讨论】:

  • 您好,感谢您的评论。我已尝试按照您的建议更新缓存(将其放在routes.py 中,但没有用。您还有其他建议吗?我应该如何修补烧瓶依赖项?我真的在这里不熟悉,并且如有任何帮助,我将不胜感激。
  • @Yotam 那么我认为是时候使用 gunicorn 或类似的东西了。建议超越开发者使用真实服务器^^
  • 嗨。我昨天尝试过使用 gunicorn 。仍然有同样的错误,但这可能是旧配置的“回声”,或者只是我这边的错误设置。我将阅读更多关于 gunicorn 的内容,看看如何正确设置它。谢谢。
  • 甚至是 apache 等,比如尝试“真实”设置
猜你喜欢
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-25
  • 2016-01-03
  • 2019-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多