天道酬勤,学无止境

zodb

将 my.packages 重命名为 my.package(Renaming my.packages to my.package)

问题 my.packages 是 src 目录中的自定义原型包。 Plone 实例中的数千个项目与其类型一起添加。 我想将包重命名为 my.package。 通过简单地卸载 my.packages 并安装 my.package,我发现 http://localhost:8080/mysite/myfolder/my-item 显示<persistent broken my.packages.content.mytype.MyType instance '\x00\x00\x00\x00\x00Un^'> 。 我应该进行迁移吗? 或者有没有简单的方法来解决这个问题? 回答1 您可以通过与sys.modules混淆来创建一个向后兼容的别名。 在你的包__init__.py中执行此操作: import sys sys.modules['my.packages'] = sys.modules[__name__] 这样,持久性机器仍然可以找到您的类。 发生的情况是,当您的 Archetypes 实例持久保存在 ZODB 中时,持久性机制会在存储的数据中存储该类的模块路径(一个带点的 Python 路径,例如my.packages.types.foobar.FooBar )。 从 ZODB 恢复对象时,然后使用相同的路径重新创建您的实例。 当你重命名你的包时,所有这些引用都被破坏了。

2022-02-10 02:24:25    分类:技术分享    plone   zodb

在 relstorage zodb 包期间,“sys.excepthook 中的错误启动的线程中出现未处理的异常”("Unhandled exception in thread started by Error in sys.excepthook" during relstorage zodb pack)

问题 我们有一个相当大的 Plone 实例在它自己的挂载点上运行。 ZMI界面列出数据库大小为7101.4M。 我们使用 Relstorage zodbpack.py 脚本每周运行一次数据库包,删除超过 7 天的对象。 过去两周,运行包的 cron 作业输出以下内容: Sun Jun 26 07:00:38 BST 2011 packing cms mount /home/zope/home/parts/zope2/lib/python/zope/configuration/xmlconfig.py:323: DeprecationWarning: zope.app.annotation has moved to zope.annotation. Import of zope.app.annotation will become unsupported in Zope 3.5 __import__(arguments[0]) /home/zope/home/eggs/p4a.common-1.0.7-py2.4.egg/p4a/common/configure.zcml:19: DeprecationWarning: The five:localsite directive is deprecated and will be removed in Zope 2.12. See

2022-02-08 07:27:19    分类:技术分享    python   plone   zope   zodb   relstorage

Renaming my.packages to my.package

my.packages is a custom archetypes package in the src directory. Thousands of items in the Plone instance are added with its types. I want to rename the package as my.package. By simply uninstalling my.packages and installing my.package, I find http://localhost:8080/mysite/myfolder/my-item showing <persistent broken my.packages.content.mytype.MyType instance '\x00\x00\x00\x00\x00Un^'>. Should I have to do migration? Or is there a simple way to fix this issue?

2022-01-16 03:57:27    分类:问答    plone   zodb

Pyramid + ZODB 图像存储(Pyramid + ZODB Image storing)

问题 我有一个接受 zip 文件的上传表单,并有一个解压缩它并从中获取每个文件的方法。 从它的 md5 哈希中创建一个唯一的 id 并将它们存储在字典中; dict[uid] = imagebinary 并返回它以便表单可以将它们存储到 ZODB 中。 我不能像这样存储图像,因为这个错误会吐出来; 2013-01-31 08:59:59,061 ERROR [waitress][Dummy-5] Exception when serving / Traceback (most recent call last): File "/home/maverick/inigo/sources/devenv/lib/python2.7/site-packages/waitress-0.8.2-py2.7.egg/waitress/channel.py", line 329, in service task.service() File "/home/maverick/inigo/sources/devenv/lib/python2.7/site-packages/waitress-0.8.2-py2.7.egg/waitress/task.py", line 173, in service self.execute() File "/home/maverick/inigo/sources

2022-01-13 19:47:44    分类:技术分享    python   pyramid   zodb

Pyramid + ZODB Image storing

I have an upload form that accepts a zip file and has a method that unzips it and get each file from it. Make a unique id from the md5 hash of it and stores them in a dictionary; dict[uid] = imagebinary and returns it so that the form can store them into ZODB. I can't store the image just like that, as this error spits out; 2013-01-31 08:59:59,061 ERROR [waitress][Dummy-5] Exception when serving / Traceback (most recent call last): File "/home/maverick/inigo/sources/devenv/lib/python2.7/site-packages/waitress-0.8.2-py2.7.egg/waitress/channel.py", line 329, in service task.service() File "/home

2022-01-13 16:50:34    分类:问答    python   pyramid   zodb

"Unhandled exception in thread started by Error in sys.excepthook" during relstorage zodb pack

We have a reasonably large Plone instance running on its own mount point. The ZMI interface lists the size of the database as 7101.4M. We run a weekly pack of the database using the Relstorage zodbpack.py script, removing objects older than 7 days. The last two weeks the cron job that runs the pack has output the following: Sun Jun 26 07:00:38 BST 2011 packing cms mount /home/zope/home/parts/zope2/lib/python/zope/configuration/xmlconfig.py:323: DeprecationWarning: zope.app.annotation has moved to zope.annotation. Import of zope.app.annotation will become unsupported in Zope 3.5 __import__

2022-01-11 17:04:21    分类:问答    python   plone   zope   zodb   relstorage

ZODB 中的 zc.lockfile.LockError(zc.lockfile.LockError in ZODB)

问题 我正在尝试在运行 Debian 和 Python 2.7.1 的 Web 服务器上使用 ZODB 3.10.2。 似乎每次我尝试从 2 个不同的进程访问同一个数据库时,都会遇到一个神秘的异常。 我尝试从交互式 Python 会话访问数据库,一切似乎都正常: >>> import ZODB >>> from ZODB.FileStorage import FileStorage >>> storage = FileStorage("test.db") >>> 但是后来我尝试了来自同时运行的另一个会话的相同系列的命令,但它似乎不起作用: >>> import ZODB >>> from ZODB.FileStorage import FileStorage >>> storage = FileStorage("test.db") No handlers could be found for logger "zc.lockfile" Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python2.7/site-packages/ZODB3-3.10.2-py2.7-linux-x86_64.egg/ZODB/FileStorage

2021-12-23 06:32:08    分类:技术分享    python   zodb

zc.lockfile.LockError in ZODB

I am trying to use ZODB 3.10.2 on my web server which is running Debian and Python 2.7.1. It seems like every time I try to access the same database from 2 different processes, I get a mysterious exception. I tried accessing a database from an interactive Python session and everything seemed to work fine: >>> import ZODB >>> from ZODB.FileStorage import FileStorage >>> storage = FileStorage("test.db") >>> But then I tried the same series of commands from another session running at the same time and it didn't seem to work: >>> import ZODB >>> from ZODB.FileStorage import FileStorage >>> storage

2021-11-25 03:27:07    分类:问答    python   zodb

ZODB 忽略目标缓存对象计数和目标缓存内存大小(ZODB ignores target cached object count and target cache memory size)

问题 我想尽可能少地使用 ZODB 缓存。 为此,我正在创建 ZODB 数据库实例并像这样打开它: db = DB('/home/me/example.db', cache_size=1, cache_size_bytes=1) db_conn = db.open_then_close_db_when_connection_closes() db_conn是db的唯一连接。 我正在通过检查db_conn._cache.cache_size和db_conn._cache.cache_size_bytes来验证它的两个目标缓存大小参数是否设置,它们的计算结果db_conn._cache.cache_size_bytes 1 。 在数据库中,我在一个 OOBTree 中存储了大量(可能是数十亿甚至更多)的 Persistent 对象。 当我从数据库中读取它们(分批)时,我的内存使用量会增加。 在每次(批量)读取后调用db_conn.cacheMinimize()可以防止内存使用量增长,但我希望 ZODB 首先不要缓存对象(而不是我强迫它从内存中删除缓存的对象)。 我正在使用cacheDetail()和cacheDetailSize()在每次cacheMinimize()调用之前和之后监视数据库缓存状态,如下所示: cache_status_before = {'detail': db

2021-10-24 03:15:14    分类:技术分享    python   caching   zodb

各种 ZODB blobstorage 布局之间有什么区别?(What is the difference between the various ZODB blobstorage layouts?)

问题 ZODB blobstorage 目录包含一个带有字符串“lawn”、“bushy”的 .layout 文件。 各种 blob 存储目录格式之间有什么区别? 回答1 解释如下:https://github.com/zopefoundation/ZODB/blob/master/src/ZODB/tests/blob_layout.txt 自贸协定: ====================== Blob 目录布局 blob 目录的内部结构由所谓的layouts 。 当前的默认布局称为bushy 。 最初的 blob 实现使用了一种我们现在称为lawn的布局,该布局仍可用于向后兼容。 布局实现了两种方法:一种用于计算 OID 的相对路径,另一种用于将相对路径转换回 OID。 我们的术语与DirectoryStorage使用的术语大致相同。 它还详细解释了格式。 回答2 您通常不需要担心布局; lawn只是为了向后兼容。 如果您确实有lawn布局 blobstorage(如果这样做,您将在日志中收到警告)并希望迁移到bushy布局,请使用 migrateblobs 脚本; 这是创建脚本的构建部分: [migrateblobs] recipe = zc.recipe.egg eggs = ZODB3 entry-points = migrateblobs=ZODB.scripts

2021-10-21 13:23:50    分类:技术分享    python   zope   zodb