【问题标题】:How to use Flask assets to set cache for static files如何使用 Flask 资产为静态文件设置缓存
【发布时间】:2015-07-31 10:22:35
【问题描述】:

我在我的项目中使用了 Flask 资源来组合所有的 js 和 css 文件。它工作得很好。

assets = Environment(app)
js = Bundle('js/jquery/jquery.js','js/owl.carousel.min.js',output='gen/packed.js')

assets.register('js_all', js)

css = Bundle('css/bootstrap.css','css/font-awesome.css','css/color.css',output='gen/packed.css')
assets.register('css_all', css)

现在我想为静态文件设置过期天数。我检查了文档中的 URL 过期部分。但我很困惑。我想将 30 天设置为过期。我如何使用烧瓶资产实现该目标。

【问题讨论】:

    标签: python flask webassets flask-assets


    【解决方案1】:

    无法直接使用 Flask 资源来执行此操作。它只是一个资产捆绑器,不控制提供最终文件。

    但是我假设您是在 Nginx 或 Apache 等网络服务器后面运行您的应用程序(如果您不是 - you should be)。

    在配置中使用其中之一设置到期时间很简单。

    Nginx

    location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
        expires 30d;
        add_header Pragma public;
        add_header Cache-Control "public";
    }
    

    阿帕奇 (取自this answer

    # enable the directives - assuming they're not enabled globally
    ExpiresActive on
    
    # send an Expires: header for each of these mimetypes (as defined by server)
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    
    # css may change a bit sometimes, so define shorter expiration
    ExpiresByType text/css "access plus 1 days"
    

    【讨论】:

    • 由于我在 nginx 中使用代理传递位置,上述位置到期代码不起作用。 serverfault.com/questions/709643/… Flask-Cache 如何设置缓存?
    • @TylerDurden - Nginx 按顺序解析位置正则表达式。因此,只需将您的 .ico/css/js 等规则放在首位。您还必须使用root 路径将其指向您的静态资产所在的文件夹。