将django-storages后端从s3更改为cloudfiles并处理旧文件

时间:2014-01-03 20:19:51

标签: python django amazon-s3 django-storage cloudfiles

我有一个django应用程序,我正在转向rackspace。我有一个使用FileFields的模型,我正在使用django-storages库s3 / boto后端。我想使用cloudfiles存储,我需要能够提供旧的s3内容。

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

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

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

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

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

红利问题:这样做时我没有遵循哪些最佳做法?我现在只使用django大约半年了。

1 个答案:

答案 0 :(得分:0)

选项A:您可以在旧存储和新存储上使用不同的路径,并根据文件的位置来决定。有些东西可能是自定义存储类,我认为:你创建从CloudFilesStorage继承的存储类,并且在重写的url方法中,它将调用super(如果文件在新存储中)或从S3BotoStorage调用url方法(如果文件在旧的存储)。

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

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