【问题标题】:Flask & uwsgi not rendering files from static folderFlask & uwsgi 不渲染静态文件夹中的文件
【发布时间】:2021-03-11 01:38:31
【问题描述】:

我正在关注this tutorial,一切顺利,但应用程序没有从静态文件夹(css、图像、脚本等)呈现文件。

我授予了文件夹(sudo chmod a+rwx static)和子文件夹的所有权限,但仍然没有渲染。

我使用的代码是以前使用几乎相同配置的代码(当时是 Ubuntu 18.04)

app = Flask(__name__,static_url_path='',static_folder="static")

还有我的 nginx 配置文件:

 location / {
    include uwsgi_params;
    uwsgi_pass unix:/home/sydney/ecocathlon/ecocathlon.sock;
}
 location /static {
     root /home/sydney/ecocathlon/static;
 }

您对我如何允许程序访问文件夹有任何想法吗?

提前致谢,

悉尼河

【问题讨论】:

  • 你尝试了哪些请求,得到了什么回应?

标签: python ubuntu flask static uwsgi


【解决方案1】:

通过使用

static_url_path=''

而不是默认的

static_url_path=None

您告诉 Flask 静态资源将位于 / 而不是 /static。这将混淆尝试使用

location /static {

因为没有/static url 路径。但如果你尝试过

location / {

请求永远不会到达您应用的主页。

要么删除static_url_path=''(并保留location /static),要么为每条路由指定单独的位置,这些路由解析为您希望nginx直接提供服务器的文件。

【讨论】:

    【解决方案2】:

    使用alias 代替root

    location /static {
         alias /home/sydney/ecocathlon/static;
    }
    

    基于this answer

    另外,我会将static_url_path 排除在您的应用程序定义之外,还有static_folder,因为您只是将其设置为默认值:

    app = Flask(__name__)
    

    static_url_path 控制应用如何生成指向静态文件的 URL,因此您可以通过将其设置为空字符串来强制它生成 /something.js 之类的链接,而不是 /static/something.js

    【讨论】:

    • 效果很好,谢谢你,祝你有美好的一天!
    【解决方案3】:

    如果您可以使用 wsgi 提供文件,请检查 whitenoise

    如果您需要,以后也可以轻松迁移到 CDN。

    【讨论】:

      猜你喜欢
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      • 2019-09-19
      • 2015-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多