为什么返回404的静态文件的GET请求,但base.css却返回200

问题描述 投票:0回答:1

我正在将用Django编写的简单网站部署到AWS Elastic Beanstalk。除了我的一些静态资源(CSS +图像文件)返回404错误之外,其他所有内容似乎都正常运行。

我已经运行python manage.py collectstatic来组织我的所有静态资源,如下所示:

-project
       |-...
       |-static
       |      |-admin  
       |      |    |-...
       |      |    
       |      |-app1
       |      |    |-style.css
       |      |    |-img1
       |      |  
       |      |-app2
       |      |    |-style.css
       |      |
       |      |-project
       |      |       |-base.css
       |-...

我确定了两个EB日志:

"GET /static/project/base.css HTTP/1.1" 200

"GET /static/app1/style.css HTTP/1.1" 404

base.css可以正常工作,但是当尝试检索app/style.css时,尽管路径与我上面的结构匹配,我还是报错了。有什么理由吗?

python django amazon-web-services amazon-elastic-beanstalk
1个回答
0
投票

关于此部署的问题是,一旦通过AWS EB发布静态文件,(如style.css)不会被读取,并且页面缺少样式。文件和论坛指出这是Django的部署方式还不太清楚并且必须指示Web服务器使用这些文件。

一旦STATIC_ROOTSTATIC_URLproject/settings.py内部定义,并且添加到urlpatterns内部的project/urls.py中,此问题已解决。

STATIC_ROOT包含将从静态文件提供服务的路径。collectstatic将把应用程序和管理文件放在STATIC_ROOT中。当浏览器发出请求时,STATIC_URL保留指向STATIC_ROOT的链接。+ static(settings [...]告诉Web服务器要使用STATIC_URL。

我在这里有一个功能完整的项目,其中包含EB部署说明:https://github.com/nandoabreu/django-polls

© www.soinside.com 2019 - 2024. All rights reserved.