我们有自定义内容类型,它们是作为ATTypes的扩展而创建的,其中两个扩展了ATFile类型,另一个扩展了ATImage类型。我们最近从Plone 4.2升级到Plone 4.3.2。刚刚发现我们根本没有使用Blob存储。难怪我们的Data.fs是巨大的。所以,我一直在尝试迁移这些自定义类型。
我已按照this example中解释的所有步骤和pypi的产品说明these Plone instructions,并使用了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大小适当下降?
答案 0 :(得分:1)
不确定这是否是最佳解决方案,但这是我能够如何实现这一目标的方法。
我创建了每种类型并行的临时内容类型(对于CustomImage我创建了CustomImageBlob,依此类推)。我只使用blob-aware的新类型,将所有类型迁移到它们的并行。然后我为原始类型启用了扩展程序,使它们能够识别blob,并迁移回来。这有点多余和耗时,但我无法在迁移到自身时将文件迁移到blob。
到目前为止,这是最佳答案,以防其他人帮助,或者可能会鼓励某人找到更好的解决方案。感谢提示keul,这无疑帮助我找到了这个解决方案。