1

ZODB データベースで ZEO を実行するためのドキュメントを調べてみましたが、彼らが言うように機能していません。通常の ZODB を正常に実行できますが、プログラムの複数のプロセスからデータベースにアクセスできるようにしたいので、ZEO を機能させようとしています。

make_serverこのスクリプトは、別の並列プロセスで関数によって作成された "database.fs" ファイルを保持するサブフォルダー zeo を含むフォルダーに作成しました。

コード:

from ZEO import ClientStorage
import ZODB
import ZODB.config
import os, time, site, subprocess, multiprocessing

# make the server in for the database in a separate process with windows command
def make_server():
    runzeo_path = site.getsitepackages()[0] + "\Lib\site-packages\zeo-4.0.0-py2.7.egg\ZEO\\runzeo.py"
    filestorage_path = os.getcwd() + '\zeo\database.fs'
    subprocess.call(["python", runzeo_path, "-a", "127.0.0.1:9100", "-f" , filestorage_path])

if __name__ == "__main__":
    server_process = multiprocessing.Process(target = make_server)
    server_process.start()
    time.sleep(5)
    storage = ClientStorage.ClientStorage(('localhost', 9100), wait=False)
    db = ZODB.DB(storage)
    connection = db.open()
    root = connection.root()

ClientStorageが指定されていない場合、プログラムはその行でブロックするだけwait=Falseです。

が指定されている場合、次のwait=Falseエラーが生成されます。

エラーメッセージ:

Traceback (most recent call last):
  File "C:\Users\cbrown\Google Drive\EclipseWorkspace\NewSpectro - v1\20131202\2 - database\zeo.py", line 17, in <module>
    db = ZODB.DB(storage)
  File "C:\Python27\lib\site-packages\zodb-4.0.0-py2.7.egg\ZODB\DB.py", line 443, in __init__
    temp_storage.load(z64, '')
  File "C:\Python27\lib\site-packages\zeo-4.0.0-py2.7.egg\ZEO\ClientStorage.py", line 841, in load
    data, tid = self._server.loadEx(oid)
  File "C:\Python27\lib\site-packages\zeo-4.0.0-py2.7.egg\ZEO\ClientStorage.py", line 88, in __getattr__
    raise ClientDisconnected()
ClientDisconnected

サーバーを実行する私のプロセスのcmdプロンプトからの出力は次のとおりです。

------
2013-12-06T21:07:27 INFO ZEO.runzeo (7460) opening storage '1' using FileStorage

------
2013-12-06T21:07:27 WARNING ZODB.FileStorage Ignoring index for C:\Users\cab0008
\Google Drive\EclipseWorkspace\NewSpectro - v1\20131202\2 - database\zeo\databas
e.fs
------
2013-12-06T21:07:27 INFO ZEO.StorageServer StorageServer created RW with storage
s: 1:RW:C:\Users\cab0008\Google Drive\EclipseWorkspace\NewSpectro - v1\20131202\
2 - database\zeo\database.fs
------
2013-12-06T21:07:27 INFO ZEO.zrpc (7460) listening on ('127.0.0.1', 9100)

私は何が間違っているのでしょうか?これを今すぐローカルで機能させたいだけなので、派手なウェブのものは必要ありません。

4

3 に答える 3

1

適切なプロセス管理を使用して、生活を簡素化する必要があります。アプリケーションと ZEO の実行/開始/停止を担当する可能性のある Supervisorを調べたいと思うでしょう。

それ以外の場合は、 ZEO をデーモン化するためのダブル フォークトリックを調べる必要があります。

リレーショナル データベースの管理に精通しており、すでにリレーショナル データベースを自由に使用できる場合は、RelStorageを非常に優れた ZODB (低レベル) ストレージ バックエンドと見なすこともできます。

于 2013-12-04T23:56:00.067 に答える
0

Windows で同じエラーが発生しましたが、Linux ではすべて問題ありません...コードは問題ありません。これを機能させるには、次の C:\Python33\Lib\site-packages\ZEO-4.0.0-py3.3.egg\ZEO\ を変更しますzrpc\trigger.py ln:235

self.trigger.send(b'x')

C:\Python33\Lib\site-packages\ZEO-4.0.0-py3.3.egg\ZEO\zrpc\client.py ln:458:459 - コメント

これらの行は次のとおりです。

if socktype != socket.SOCK_STREAM:

    continue    
于 2014-01-16T16:18:12.787 に答える