4

我有一个 django 应用程序,我正在移动到 rackspace。我有一个使用 FileFields 的模型,我正在使用 django-storages 库 s3/boto 后端。我想使用云文件进行存储,并且我需要能够提供旧的 s3 内容。

在我提供文件链接的模板页面上,我这样做:

href="{{ static_url }}{{ article.code_archive_file}}"

static_url从视图中设置并且等于settings.STATIC_URL。显然这行不通,因为settings.STATIC_URL当我从 s3 切换时会发生变化。

我是否需要编写一个脚本来手动将我的所有 s3 文件迁移到云文件,并且还要检查并更新我的表中的所有 FileFields?(啊)。我宁愿能够更换存储后端并将旧材料留在 s3 存储桶中。

如果我确实需要迁移文件和字段,是否有人已经为此编写了脚本?

额外的问题:这样做时我没有遵循哪些最佳实践?我现在只使用 django 大约半年了。

4

1 回答 1

0

选项 A:您可以在新旧存储上使用稍微不同的路径,并决定从哪里提供文件。我认为某些东西可能是自定义存储类:您创建从 CloudFilesStorage 继承的存储类,并且在覆盖的 url 方法中,它将调用 super(如果文件在新存储中)或从 S3BotoStorage 调用 url 方法(如果文件在旧贮存)。

选项 B:您可以将文件移动到云文件。如果您保持路径相似,我认为您实际上不需要更改 DB 中的任何内容。也许你甚至不需要脚本,只需下载文件然后上传(s3cmd 可以用于下载,cloudfiles 可能也有一些上传工具)。

关于最佳实践:您应该使用 media_url 和 DEFAULT_FILE_STORAGE 而不是 static_url 和静态存储。将项目的静态文件(css/js/icons)和上传的媒体分开是一个好主意。

于 2014-01-09T11:51:51.473 回答