我正在向AWS部署django项目。我需要帮助设置一个合适的静态文件结构。
目前在我的本地开发环境中,我在settings.py中有以下内容:
STATIC_ROOT = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'static')
STATIC_URL = '/static/'
我已经买了格林菲尔德和罗伊的“两勺Django”。他们并没有真正提到有关部署的静态文件策略。
我看到文档https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-STATICFILES_DIRS中的一些示例使用了STATICFILES_DIR,但是在运行“python manage.py collectstatic”之后,我在'assets'和'static'目录中都有冗余文件,这似乎有点不必要。我可能没有正确使用STATICFILES_DIR。
STATICFILES_DIRS = (
('assets','assets/',)
)
这是我的项目树,我已经浓缩以显示相关部分:
mysite
|____assets
| |____css
| |____ico
| |____js
|____fish
| |______init__.py
| |____admin.py
| |____models.py
| |____templates
| | |____home.html
| |____tests.py
| |____views.py
|____manage.py
|____mysite
| |______init__.py
| |____settings.py
| |____urls.py
| |____views.py
| |____wsgi.py
|____static
| |____css
| |____ico
| |____js
|____requirements.txt
我正在使用Amazon's django deployment example使用Elastic Beanstalks,EC2和RDS与MySQL5.6。我不知道他们是否使用nginx,gunicorn或其他东西。但我想这可能不是主题了。
我真的不想在部署过程中弄乱这一点。如果您在AWS中部署了django项目,我真的可以使用您的帮助。你能指导我如何设置静态文件进行部署吗?感谢。
答案 0 :(得分:2)
您没有太多提及您的生产环境以及如何部署django。但理想情况下,在生产中,你根本不会让django服务你的静态文件,你会让一个合适的Web服务器(如nginx)直接提供静态文件。这要快得多,而且你没有得到让它为静态文件服务的所有“django开销”。 collectstatic在将静态文件与django app文件(需要通过框架的文件)分离方面做得非常好。
因此,您可以将STATIC_ROOT设置为您的Web服务器可以访问的路径,以便它可以直接提供文件,并运行collectstatic来填充它。然后,您将STATIC_URL设置为django在创建静态URL时将使用的URL,并且该URL也应在您的Web服务器配置中匹配。
STATIC_ROOT = '/some/path/to/static/'
STATIC_URL = '/static/'
然后在nginx conf中,例如
# set up url to serve static content
location /static/ {
autoindex on;
alias /some/path/to/static;
}
# all other urls go to django
location / {
... pass all other requests to django (uwsgi or fcgi or etc...)
}
之前我没有使用过STATICFILES_DIRS,但它听起来像是一组额外的路径,将包含在collectstatic输出中。