如何在heroku上设置django-compressor,离线压缩到S3

2024-05-04

我遵循了在 SO 和不同博客中找到的每一条 QA 建议,在我的开发机器上一切正常,但在 Heroku 上没有任何效果。

这是我的设置:

DEFAULT_FILE_STORAGE = 'arena.utils.MediaRootS3BotoStorage' # media files
# storage

AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')
AWS_PRELOAD_METADATA = True # necessary to fix manage.py collectstatic command to only upload changed files instead of all files

S3_URL = 'https://%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
MEDIA_URL = S3_URL + '/media/'

STATIC_URL = S3_URL + '/static/'

ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'


COMPRESS_URL = STATIC_URL
COMPRESS_OFFLINE = True
COMPRESS_STORAGE = 'utils.CachedS3BotoStorage'
STATICFILES_STORAGE = COMPRESS_STORAGE

当我运行collectstatic/compress时一切正常,我看到文件被收集到S3并放置在正确的位置。我看到清单文件。

加载带有压缩器标签的任何页面,显示错误OfflineGenerationError: You have offline compression enabled but key "d2a53169c44dec41ce3ee7da19b2b9d4" is missing from offline manifest.跑步python manage.py compress又解决不了任何问题。当我检查清单文件时,它查找的密钥确实不存在。

这里出了什么问题?

我已经检查过的问题:

如何使用 Amazon S3 配置 django-compressor 和 django-staticfiles? https://stackoverflow.com/questions/7698406/how-to-configure-django-compressor-and-django-staticfiles-with-amazons-s3

带有 S3 URL 的 Django 压缩器 Heroku https://stackoverflow.com/questions/10929418/django-compressor-with-s3-url-heroku

使用远程存储配置 django-compressor (django-storage - amazon s3) https://stackoverflow.com/questions/10316131/configuring-django-compressor-with-remote-storage-django-storage-amazon-s3


在我这边,我有非常相似的配置,并且我已经成功使用压缩器超过 2 年了。

设置.py

COMPRESS_STORAGE = 'MyAwesomeApp.app.CachedS3BotoStorage.CachedS3BotoStorage'

AWS_ACCESS_KEY_ID = '#######'
AWS_SECRET_ACCESS_KEY = '########################+#########+BqoQ'
AWS_STORAGE_BUCKET_NAME = 'myAmazonS3cdn.myawesomewebsite.com'
AWS_S3_SECURE_URLS = False
AWS_QUERYSTRING_AUTH = False

COMPRESS_ROOT = 'MyAwesomeApp/static'
STATIC_ROOT = 'MyAwesomeApp/static/javascript'
COMPRESS_OUTPUT_DIR = 'compressed'
STATICFILES_STORAGE = COMPRESS_STORAGE

STATIC_URL = "http://myAmazonS3cdn.myawesomewebsite.com/"
COMPRESS_URL = STATIC_URL
COMPRESS_ENABLED = True

缓存S3BotoStorage.py

from django.core.files.storage import get_storage_class
from storages.backends.s3boto import S3BotoStorage

from django.core.files.base import File

class CachedS3BotoStorage(S3BotoStorage):
    """
    S3 storage backend that saves the files locally, too.
    """
    def __init__(self, *args, **kwargs):
        super(CachedS3BotoStorage, self).__init__(*args, **kwargs)
        self.local_storage = get_storage_class("compressor.storage.CompressorFileStorage")()

    def save(self, name, content):
        name = super(CachedS3BotoStorage, self).save(name, content)
        self.local_storage._save(name, content)
        return name

我在跑python 管理p.py 压缩本地,并在我的静态文件目录上生成清单。 Heroku 只处理 collecstatic 并将最新的清单版本传递到我的 CDN。

Regards,

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在heroku上设置django-compressor,离线压缩到S3 的相关文章

随机推荐

  • django-storages boto3 访问私有文件的文件 url

    我正在尝试在我创建的测试模型中获取文件的生成 URL 我正在尝试通过以下方式获取文件的正确网址 modelobject file url如果文件是公开的 它确实会给我正确的网址 但是如果文件是私有的 它不会自动为我生成签名的网址 这通常是如
  • 如何获取 C# 项目之间的依赖关系图

    我有一个相当复杂的应用程序 它已分解为多个组件 每个组件都有一个解决方案文件 其中包含一堆项目 所以我喜欢将其视为一个包含多个项目 dll 的组件 还有一个 通用 组件 所有其他组件都依赖于 common 所以编译是这样的 nant com
  • 我应该测试 Spring Boot 应用程序的 main() 方法吗?如何测试?

    当我创建 Spring Boot 应用程序时 它会生成 2 个类 SpringBootApplication public class App public static void main String args SpringApplic
  • Mongoose Date.now 时间不准确

    在过去的两个小时里 我一直在抓狂 起初我以为 Moment js 是没有返回正确时间的罪魁祸首 但其实是 mongoose Date now 做了一些邪恶的事情 这是代码 const moment require moment const
  • D3:使用 d3-tile 缩放到边界框

    我已成功将 D3 矢量 地图分层到从 Mapbox 提取图块的 d3 tile 光栅 地图之上 手动缩放效果非常好 矢量和光栅都是同步的 我现在正在尝试实施迈克 博斯托克 缩放到边界框 https bl ocks org mbostock
  • 复杂C语法的含义[重复]

    这个问题在这里已经有答案了 可能的重复 这个C语句是什么意思 https stackoverflow com questions 8249483 what does this c statement mean 这个表达是什么意思 char
  • 使用 Python 解压缩数据包的 gzip 有效负载

    我目前正在开发一个程序 该程序采用 pcap 文件并使用 scapy 包按 ip 分离出所有数据包 我想解压缩使用 gzip 包压缩的有效负载 我可以判断有效负载是否经过 gzip 压缩 因为它包含 Content Encoding gzi
  • JavaScript 中的对象解构[重复]

    这个问题在这里已经有答案了 gt a a true Statement lt a true 上面的语句是赋值true to a 为什么上面的语句在chrome控制台中没有报错 虽然下面的语句给出了错误 gt a a true Stateme
  • 使用Vue组件渲染函数时无限循环

    我正在使用 Vue 组件来渲染一些表头 如下所示 render createElement return createElement div class header Array apply null length this initHou
  • 为什么 C++11 有 `make_shared` 而没有 `make_unique` [重复]

    这个问题在这里已经有答案了 可能的重复 make unique 完美转发 https stackoverflow com questions 7038357 make unique and perfect forwarding 为什么C 1
  • 在“读取初始通信数据包”时失去与 MySQL 服务器的连接,系统错误:61

    3天了 已经碰壁了 我正在运行 mac os x 我已经安装了mysql 5 5 14 osx10 6 x86 64 dmg 就上下文而言 我需要安装 mysql gem 以便与 ruby on Rails 一起使用 除非有一个有效的 my
  • 尝试后台获取期间出现 AFNetworking 错误 53

    在更新我的应用程序以支持后台应用程序刷新时 我遇到了 AFNetworking 问题 我正进入 状态NSPOSIXErrorDomain Code 53 Software caused connection abort 该问题似乎出现在 i
  • 如何将Python + Flask变量输入到html标签属性中

    顺便说一句 新手 我正在使用 Python Flask 我有一个 Python 变量 我想将其替换为value 我的尝试 value variable 没用
  • 使用base-href和deploy-url构建Angular CLI来访问CDN上的资产

    的背景 我正在使用 Angular CLI 构建一个项目 包含多个应用程序 我想在我的域上的单独子路径上发布应用程序 例如example com apps app1 如果我设置 base href参数为 apps app1 它解决了有关路由
  • Primefaces:对话框隐藏时文本字段不会更新

    我正在尝试从对话框更新文本字段 文本字段位于父组件中 但它没有发生 如果我在命令按钮的更新中给出文本字段的ID 我遇到了错误 javax faces FacesException 找不到从 tabView lkpSltRec 引用的标识符
  • 更改列表视图中的确切滚动位置

    一直在网上寻找答案 但我还没有找到任何可以做到这一点的东西 我想以编程方式更改 WPF 列表视图中的确切位置 某种说法 ListView Scrollposition Y some value 我唯一能找到的就是将值更改为列表视图中的对象
  • ANTLR语法的迁移工具

    假设我有以下简单语法 查询 DSL grammar TestGrammar term textTerm textTerm Text T VALUE STRING T VALUE value STRING WS t r n gt skip 然
  • 如何在交叉表 Crystal Report 中添加 2 个汇总字段

    我使用水晶报告中的交叉表创建报告 我有如下图所示的列 我想要 2 个汇总列 数量和销售额 并在交叉表专家中添加 2 个汇总字段 但还是不行 如果我想将 4 的值分配给 3 交叉表专家 自定义样式 汇总字段 选择水平 选中显示标签 至少在我的
  • Linux 上的 Imagemagick 将 EMF 转换为 PNG

    我尝试在 Red Hat Enterprise Linux Server 5 5 Tikanga 上使用 Imagemagick 将 EMF 格式的图像转换为 PNG 但遇到以下错误 转换 此图像格式 thumbnail emf 没有解码委
  • 如何在heroku上设置django-compressor,离线压缩到S3

    我遵循了在 SO 和不同博客中找到的每一条 QA 建议 在我的开发机器上一切正常 但在 Heroku 上没有任何效果 这是我的设置 DEFAULT FILE STORAGE arena utils MediaRootS3BotoStorag