基本上我可以很好地使用zodb。然而,zeo教程都非常混乱。
根据我的理解,您可以通过进入我的目录并在命令提示符下punchign来启动服务器
python runzeo.py-c zeo.config
其中我的zeo.config文件如下
<zeo>
address localhost:8090
</zeo>
<filestorage>
path C:\\Anaconda\\Lib\\site-packages\\ZEO\\var\\tmp\\Data.fs
</filestorage>
<eventlog>
<logfile>
path C:\\Anaconda\\Lib\\site-packages\\ZEO\\var\\tmp\\zeo.log
format %(asctime)s %(message)s
</logfile>
</eventlog>
当我运行它时,日志文件充满了
2014-07-02T14:49:15 (1948) opening storage '1' using FileStorage
2014-07-02T14:49:15 StorageServer created RW with storages: 1:RW:C:\\Anaconda\\Lib\\site-packages\\ZEO\\var\\tmp\\Data.fs
2014-07-02T14:49:15 (1948) listening on ('localhost', 8090)
现在,当我试图让一个客户机在每行之后添加一些带有打印的随机数据到数据库中时,看看结果如何:
from ZEO.ClientStorage import ClientStorage
from ZODB import DB
import transaction
print "starting"
storage=ClientStorage(('localhost',8090))
print "storage opened"
db=DB(storage)
conn=db.open()
print "connection opened"
root=conn.root()
print "established connection"
root['letters']=['a','b','c']
print "added values"
transaction.commit()
print "transaction done"
root.close()
print "closed"
我的代码只打印“starting”,不会抛出错误消息,因此我假设它被困在storage=clientstorange(('localhost',8090))行上,我的data.fs文件保持不变。我不知道怎么了,我已经查阅了所有的教程。
我在windows上使用python 2.7,并从pip安装了zeo/zodb,所以我认为它们都是最新版本,这很有帮助。
任何指向不同面向对象数据库(具有多进程访问)的帮助或指针都将不胜感激。
谢谢大家
最佳答案
找到了我自己问题的答案。在windows中使用localhost的实现似乎有一个bug。(在同一台计算机上运行服务器和客户端)
源代码需要编辑:
我在windows上使用zodb/zeo 4.0和python 2.7.6也遇到了同样的问题(无法连接到zeo服务器)。
建议的解决方案(更改zeo/zrpc/client.py的446行)对我很有用,那么为什么不将补丁也合并到4.0版本中呢?
- socket.getaddrinfo(host or 'localhost', port)
+ socket.getaddrinfo(host or 'localhost', port, 0, socket.SOCK_STREAM)"
从https://bugs.launchpad.net/zodb/+bug/1004513