我有一个 django 应用程序,我正在将其转移到机架空间。我有一个使用 FileFields 的模型,并且正在使用 django-storages 库 s3/boto 后端。我想使用 cloudfiles 进行存储,并且我需要能够提供旧的 s3 内容。
在提供文件链接的模板页面上,我执行以下操作:
href="{{ static_url }}{{ article.code_archive_file}}"
static_url
从视图设置并且等于settings.STATIC_URL
。显然这不会起作用,因为settings.STATIC_URL
当我从 s3 切换时,情况将会发生变化。
我是否需要编写一个脚本来手动将所有 s3 文件迁移到 cloudfiles,并检查并更新表中的所有 FileField? (啊)。我宁愿能够更改存储后端并将旧材料保留在 s3 存储桶中。
如果我确实需要迁移文件和字段,有人已经为此编写了脚本吗?
额外问题:在执行此操作时我没有遵循哪些最佳实践?我现在使用 django 才半年左右。
选项 A:您可以在新旧存储上使用稍有不同的路径,并决定从何处提供文件。有些东西可能是自定义存储类,我认为:您创建从 CloudFilesStorage 继承的存储类,并且在重写的 url 方法中,它将调用 super (如果文件位于新存储中)或从 S3BotoStorage 调用 url 方法(如果文件位于旧存储中)贮存)。
选项 B:您可以将文件移动到 cloudfiles。我认为如果您保持路径相似,那么您实际上不需要更改数据库中的任何内容。也许你甚至不需要脚本,只需下载文件然后上传(s3cmd可以用于下载,cloudfiles可能也有一些上传工具)。
关于最佳实践:您应该使用 media_url 和 DEFAULT_FILE_STORAGE 而不是 static_url 和静态存储。将项目的静态文件(css/js/icons)和上传的媒体分开是一个好主意。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)