Django压缩+静态与亚马逊s3

时间:2016-07-18 08:49:43

标签: django heroku amazon-s3 django-staticfiles django-compressor

我有一个具有以下架构的django应用程序:

skeleton/
   assets/
       sass/
   static/
       css/
   templates/
       base.html
   settings/
       common.py
       dev.py
       prod.py
apps/
    views.py
    // ...

我有一个gulpfile.js脚本,可以将所有sass编译成skeleton/static/css/desktop.css,并且我的模板中有skeleton/templates/base.html

<!DOCTYPE html>
<html>
<head>
{% load compress staticfiles %}
{% block css %}
    {% compress css %}
        <link href="{% static "css/desktop.css" %}" type="text/css" rel="stylesheet">
    {% endcompress %}
{% endblock %}
</head>
...

我的设置是:

# common.py
STATIC_ROOT = normpath(join(DJANGO_ROOT, 'static'))
STATIC_URL = '/static/'

INSTALLED_APPS = (
    ...
    'compressor',
    ...
)
COMPRESS_ENABLED = True
COMPRESS_OUTPUT_DIR = 'CACHE'

此文件由proddev导入:

# prod.py
STATICFILES_STORAGE = DEFAULT_FILE_STORAGE = 'apps.core.storage.CachedS3BotoStorage'
STATIC_URL = 'https://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME

# dev.py
DEBUG = True
COMPRESS_ENABLED = True

我已关注using-staticfiles guide并实施了CachedS3BotoStorage(代码完全相同)。

在本地它可以正常工作,但是一旦我尝试将它推送到heroku,编译就会失败:

  

CommandError:渲染skeleton / templates / base.html时发生错误:无法通过COMPRESS_URL('https://XXX.amazonaws.com/css/desktop.css')访问“https://XXX.amazonaws.com/”并且无法压缩

我丢失了,文件https://XXX.amazonaws.com/css/desktop.css是否存在(即如果我尝试直接访问它,我得到了文件),但不知怎的,压缩语句不起作用。

我认为添加CachedS3BotoStorage文件存储会有所帮助,但显然它没有。

我该怎么做才能解决这个问题?

注意:我只包含了最少量的代码/配置,希望能够提供上下文,但如果其他任何有意义的话我会添加它。

1 个答案:

答案 0 :(得分:0)

您在模板中不需要{% compress %}标签。

您可能会发现this的答案很有帮助。