【问题标题】:Zombie SharedDataMiddleware on Python HerokuPython Heroku 上的僵尸 SharedDataMiddleware
【发布时间】:2012-07-15 23:30:08
【问题描述】:

我正在 Heroku 上设置一个 Flask 应用程序。在我添加静态文件之前一切正常。我正在使用这个:

from werkzeug import SharedDataMiddleware
app = Flask(__name__)
app.wsgi_app = SharedDataMiddleware(app.wsgi_app, {'/static': os.path.join(os.path.dirname(__file__), 'static') })

我第一次部署应用程序时,./static 中的相应文件将在 herokuapp.com/static 上可用。但是在初始部署之后,Heroku 上的文件永远不会改变。如果我将最后一行更改为:

app.wsgi_app = SharedDataMiddleware(app.wsgi_app, {'/assets': os.path.join(os.path.dirname(__file__), 'static') })

静态文件的新 URL herokuapp.com/assets,然后我可以看到更新的文件。

文件的镜像似乎卡在了系统中。我已经更改了四次,仍然可以访问所有 URL。

【问题讨论】:

  • 为什么你不使用flask中为你处理静态文件的部分?在Flask Docs 中有很好的描述。
  • 它也有据可查,因为它在生产环境中不能很好地工作。 SharedDataMiddleware 是要走的路。只是无法弄清楚为什么它会卡在 Heroku 的系统中。
  • @nathancahill,推荐在生产环境中使用 Flask 提供静态文件,因为像 nginx 这样的服务器比通过 Python 更快。但是 SharedDataMiddleware 是 Python,因此并不比 Flask 好。
  • 哦,我想这是有道理的。谢谢。

标签: python heroku flask


【解决方案1】:

SharedDataMiddleware 默认发送Cache-Control 和Expires HTTP 标头,这意味着您的网络浏览器甚至可能不会向服务器发送请求,而只会使用缓存中的旧文件。试试disabling the cache:

app.wsgi_app = SharedDataMiddleware(
    app.wsgi_app,
    {'/static': os.path.join(os.path.dirname(__file__), 'static')},
    cache=False)

Flask 对静态文件也是如此。到disable it那里:

app.config['SEND_FILE_MAX_AGE_DEFAULT'] = None

【讨论】:

  • 有效,但我最终只是将所有静态文件放在 S3 上。
猜你喜欢
  • 2020-05-19
  • 2021-07-26
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多