4

我正在为客户开发一个 Django CMS 项目,该项目通过 apphook 使用 Aldryn 博客。我正在尝试部署到 Heroku。由于 Heroku 的临时文件系统,媒体必须在外部托管。目前唯一的媒体包括 Django CMS 图片插件(使用标准 ImageField)和 Aldryn 博客文章(使用 FilerImageField 和 easy_thumbnails)。

我已经阅读了有关使用 Boto 存储到 S3 的信息,这似乎就像设置新的 DEFAULT_FILE_STORAGE(和 THUMBNAIL_DEFAULT_STORAGE)一样简单。这似乎是一个很好的解决方案,但其他一切(网络服务器、搜索引擎、数据库)都是由 Heroku 及其插件提供的。当客户签字时,我想简单地转移 Heroku 所有权。

这导致我考虑使用 Cloudinary 作为 Heroku 插件,但我对集成感到困惑。我是否必须将 ImageFields 和 FileImageFields 更改为 CloudinaryFields 并丢失(或被迫以某种方式修补)Filer 和 easy_thumbnail 功能,而不是简单地更改 DEFAULT_FILE_STORAGE?

似乎我要么选择 Boto,客户信用卡同时使用 Heroku 和 S3,要么选择 Cloudinary 并处理粗略的集成。我错过了更好的解决方案吗?

4

2 回答 2

3

您不一定会错过更好的解决方案。Heroku 的问题在于,如果你想上传大于几 mb 的文件——或者更重要的是,你想通过一个可能很慢的连接来上传——你会遇到严重的超时,因为 Django 的工作原理是首先接受你的文件作为它以表格形式发布,然后通过 Heroku dyno 上传到云存储提供商。

我通常建议您使用 AWS 帐户设置您的客户,以便他们获得 S3 和 CloudFront,然后使用s3direct。不幸的是,这确实涉及将ImageFields 和其他可能较大FileField的 s 更改为S3DirectFields,它将整个 URL 存储到一个文件(在 S3 或 CloudFront 上)。然后,这将为您的模型管理员提供每个字段的启用 AJAX 的上传器。只要您在上传所有图像后点击“提交”,它就可以很好地工作。

我在我的播客网站上使用它,因为就其性质而言,我们必须处理需要一些时间上传的文件。您可以 - 并且确实必须 - 调整 S3Direct 以便它只接受您想要的文件类型,每个字段 - 您在 settings.py 文件中执行此操作 - 但它工作得很好,并为用户提供了一个进度条。

谁能很好地与 Django CMS 集成,我无法告诉你,但我已经将它与管理员的 Suit 皮肤一起使用,并且没有任何问题。

希望有帮助。

于 2015-10-15T21:34:23.220 回答
1

您可以简单地尝试以下操作,而无需更改 django 模型字段:

1.安装

pip install cloudinary dj3-cloudinary-storage
  1. 定义您的 Cloudinary 配置

    CLOUDINARY_STORAGE = { 'CLOUD_NAME': '您的云名称', 'API_KEY': 'YUOR CLOUDINARY API 密钥', 'API_SECRET': '您的云 API 密钥', }

  2. 定义您的存储

    DEFAULT_FILE_STORAGE = 'cloudinary_storage.storage.MediaCloudinaryStorage'

于 2021-04-09T17:51:43.090 回答