用于AWS生产的django staticfiles设置

时间:2014-04-01 04:53:57

标签: django deployment amazon-web-services

我正在向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项目,我真的可以使用您的帮助。你能指导我如何设置静态文件进行部署吗?感谢。

1 个答案:

答案 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输出中。