0

我们有作为 ATTypes 扩展创建的自定义内容类型,其中两个扩展了 ATFile 类型,一个扩展了 ATImage 类型。我们最近从 Plone 4.2 升级到了 Plone 4.3.2。刚刚发现我们根本没有使用 Blob 存储。难怪我们的 Data.fs 是巨大的。所以,我一直在尝试迁移这些自定义类型。

我已按照本示例中解释的所有步骤以及 pypi 的产品说明、这些 Plone 说明,并使用了 pypi 页面中的示例来进行 archetypes.schemaextender(对不起,因为我仍然是菜鸟,所以我的名声不会让我发布了超过 2 个链接)。

最后,我创建了一个扩展器脚本,它只是扩展了 ATFile 类型,将 FileField 更改为 BlobField。它似乎适用于新项目。我可以添加一个新的 CustomFileType,它似乎正在将文件上传到 blob,并且我的新上传字段正在显示(我将描述更改为一种快速验证它正在使用的方法)。

但是,我在迁移所有现有内容项以将二进制文件移动到 blob 时遇到问题。我尝试了通用的 migrate() 脚本,然后按照上述资源中的建议创建了自己的 migrate 和 walker。它似乎没有做任何事情。当打印它尝试合并的每个项目的结果时,我确实看到每个项目都返回了这个结果:

DEBUG ATCT.migration Migrating /site/path/to/custom/file/filename.ext (CustomFile -> Blob)

当我导航到站点中的自定义文件类型时,它通常会显示文件的链接,它只是空的。然后去编辑,它把它当作那里没有文件。作为检查,我禁用了扩展器,重新启动并重新加载了自定义文件。文件现在在那里。所以看起来我正在运行的脚本只是没有将该文件移动到它现在应该在的位置。

我觉得我错过了一些简单的东西,它就在那里,但我似乎找不到它。所有这些都是我边走边学的,有点过头了,所以希望有人可以轻松地让我明白。

如果我需要提供任何其他信息,请发表评论,我会尽力提供您需要的。

更新 我使用 Red Turtle 对象作为示例,按照 keul 的建议迁移我的自定义类型。我仍然无法让文件迁移到类型本身的 blob。所以,我尝试了不同的方法。我创建了一个新的自定义类型“CustomBlob”,这是我的 CustomFile 类型的模拟设置,并且仅将这个新的 blob 类型扩展为可识别 blob。然后我将 CustomFiles 迁移到 CustomBlob,进行了彻底的清理和重建,并打包了 zeo。迁移似乎大部分都有效,blobstorage 增长了预期的数量,新类型有效。但是,Data.fs 的大小并没有减小。我原以为存储在 Data.fs 中的二进制文件会在迁移过程中被删除。我理解错了吗?如何删除这些文件以使 Data.fs 大小适当减小?

4

1 回答 1

1

不确定这是否是最好的解决方案,但这是我如何使它工作的方法。

我创建了与每种类型并行的临时内容类型(对于 CustomImage,我创建了 CustomImageBlob,等等)。我只制作了新类型 blob-aware,将所有类型迁移到它们的并行。然后我为原始类型启用了扩展器以使它们能够识别 blob,然后迁移回来。这有点多余且耗时,但是在迁移到自身时,我只是无法将文件迁移到 blob。

提供此作为迄今为止的最佳答案,以防它帮助其他人,或者可能鼓励某人找到更好的解决方案。感谢keul的提示,它绝对帮助我找到了这个解决方案。

于 2014-07-09T14:53:21.583 回答