django - Django-compressor & S3 Boto:静态文件未压缩
问题描述
错误
静态文件保存在 S3 中 - 但是它们没有被压缩。
我的代码
HTML
{% compress css %}
<link href="{{ STATIC_URL }}css/project.css" rel="stylesheet" type="text/css" charset="utf-8">
{% endcompress %}
生产设置
COMPRESS_ENABLED = True
STATICFILES_STORAGE = '<myproject>.storage.CachedS3Boto3Storage'
COMPRESS_STORAGE = STATICFILES_STORAGE
COMPRESS_URL = STATIC_URL
COMPRESS_FILTERS = {
'css': ['compressor.filters.css_default.CssAbsoluteFilter'],
'js': ['compressor.filters.jsmin.JSMinFilter']
}
CachedS3BotoStorage
from django.core.files.storage import get_storage_class
from storages.backends.s3boto3 import S3Boto3Storage
class CachedS3Boto3Storage(S3Boto3Storage):
"""
S3 storage backend that saves the files locally, too.
"""
def __init__(self, *args, **kwargs):
super(CachedS3Boto3Storage, self).__init__(*args, **kwargs)
self.local_storage = get_storage_class(
"compressor.storage.CompressorFileStorage")()
def save(self, name, content):
self.local_storage._save(name, content)
super(CachedS3Boto3Storage, self).save(name, self.local_storage._open(name))
return name
推荐什么
文档显示你最终会得到这样的东西-
STATIC_ROOT = '/path/to/staticfiles'
COMPRESS_ROOT = STATIC_ROOT
STATICFILES_STORAGE = 'mysite.storage.CachedS3BotoStorage'
COMPRESS_STORAGE = STATICFILES_STORAGE
STATIC_URL = 'https://compressor-test.s3.amazonaws.com/'
COMPRESS_URL = STATIC_URL
我可以确认的
- 我的
COMPRESS_ROOT
&STATIC_ROOT
是一样的:'/app/staticfiles'
STATICFILES_STORAGE
指着<myproject>.storage.CachedS3BotoStorage
- STATIC_URL 是
'https://s3.amazonaws.com/<my_prod-bucket>/static/'
- COMPRESS_URL == STATIC_URL
想法?
任何想法为什么压缩机不压缩?
编辑:这个实现弄乱了 Django 调试工具栏,所以它似乎{{ STATIC_URL }}
在静态文件路径中使用“有效”,但同时设置又搞砸了调试工具栏。
解决方案
推荐阅读
- apache-kafka - Kafka 消费者是否从分区中的活动段读取消息?
- css - 如何仅隐藏父类的第一个元素
- c# - 嵌套对象的实体框架更改引用
- javascript - 为什么js'for循环的最后一条语句不能加分号?
- reactjs - 如何使用 framer-motion 检测某些滚动位置?
- scala - 将文件导入databricks笔记本的问题
- python - 如何增加pyTelegramBotApi中send_action的运行时间?
- javascript - 检查文本是否只是十进制数字?
- javascript - 如何将数据从 HTML 文件发送到 .Js 然后解决并返回 HTML 中的结果
- java - 如果客户端在 GRPC 服务器端流中重新启动,如何继续流?