ZODB / ZEO. 从客户端连接到服务器
基本上,我可以正常使用 ZODB。不过,ZEO 的教程都让我感到很困惑。
根据我的理解,你需要先进入我的文件夹,然后在命令提示符中输入:
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,所以我认为它们都是最新版本,如果这有帮助的话。
任何帮助或指向其他支持多进程访问的面向对象数据库的建议都将不胜感激。
谢谢大家
1 个回答
2
我找到了解决自己问题的方法。看起来在Windows上使用本地服务器时有个小bug。(在同一台机器上运行服务器和客户端)
源代码需要做一些修改:
我也遇到了同样的问题(无法连接到ZEO服务器),我在Windows上使用的是ZODB/ZEO 4.0和Python 2.7.6。
有人提出的解决方案(修改ZEO/zrpc/client.py文件的第446行)对我有效,那为什么不把这个修复也加入到4.0版本呢?
- socket.getaddrinfo(host or 'localhost', port) + socket.getaddrinfo(host or 'localhost', port, 0, socket.SOCK_STREAM)"