我正在将用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
时,尽管路径与我上面的结构匹配,我还是报错了。有什么理由吗?
关于此部署的问题是,一旦通过AWS EB发布静态文件,(如style.css)不会被读取,并且页面缺少样式。文件和论坛指出这是Django的部署方式还不太清楚并且必须指示Web服务器使用这些文件。
一旦STATIC_ROOT
和STATIC_URL
在project/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