【发布时间】:2014-01-21 14:50:17
【问题描述】:
我有一个 django 应用程序,我要迁移到 rackspace。我有一个使用 FileFields 的模型,我正在使用 django-storages 库 s3/boto 后端。我想使用云文件进行存储,并且需要能够提供旧的 s3 内容。
在我提供文件链接的模板页面上,我这样做:
href="{{ static_url }}{{ article.code_archive_file}}"
static_url 是从视图中设置的,等于settings.STATIC_URL。显然这行不通,因为当我从 s3 切换时,settings.STATIC_URL 会发生变化。
我是否需要编写一个脚本来手动将我的所有 s3 文件迁移到 cloudfiles 并检查并更新我的表中的所有 FileFields? (啊)。我宁愿能够更换存储后端并将旧材料留在 s3 存储桶中。
如果我确实需要迁移文件和字段,是否有人已经为此编写了脚本?
额外问题:我在执行此操作时没有遵循哪些最佳实践?我用django才半年左右。
【问题讨论】:
-
即兴发挥,我建议使用django-cumulus 与 CloudFiles 交互。对于迁移,我强烈建议使用wonton 使用 gevent 快速传输文件。
-
作为@KyleKelley 建议的替代方案,您可以添加一个try-except-try 模式,该模式将首先尝试从S3 获取文件,如果它得到404,它会从CloudFiles 尝试,如果失败然后文件不在任何地方。我们不得不对 S3 和 Google Cloud Storage 做类似的事情。
-
另外,我应该说我的意思是纯粹的文件迁移,而不是数据库迁移。这部分听起来很耗时(但可以编写脚本)。
-
哦。刚开始看 django-storages。看起来 CloudFiles 后端已经过时了(它引用了一个已被弃用的 Mosso CloudFiles 模块)。如果您继续使用 django-storages,我建议使用 libcloud 后端。
-
感谢指向 django-cumulus 的指针。看起来做一些我想做的事情可能更容易——比如使用多个容器——我不确定如何使用 django-storages 来完成。实际上,也感谢您将我指向 libcloud 后端。如果我坚持使用 django-storages,我可能会改用它。
标签: python django amazon-s3 django-storage cloudfiles