2012-11-08 2 views
2

서버가 실행되는 동안 데이터베이스를 열려고 할 때마다 데이터베이스가 다른 프로세스에서 이미 열려 있다는 오류가 표시됩니다.두 프로세스에서 ZODB 액세스

문제는 데이터베이스를 확인하기 위해 cron으로 예약 할 수있는 스크립트가 있거나 심지어 서버가 실행되는 동안 pshell을 사용하는 것입니다.

지금까지는 다른 프로세스에서 데이터베이스를 열 수없는 것처럼 보였습니다. 실제로 문서에 따르면 데이터베이스에 여러 개의 연결을 설정할 수 있다고합니다.

이 문제로 인해 서버를 포함하여 한 번에 하나의 스크립트/프로세스 만 실행해야합니다.

답변

5

ZODB 자체는 in-process 개체 데이터베이스입니다. 그러나 클라이언트 - 서버 모델을 사용하여 프로세스간에 공유 할 수 있습니다.

  • 사용 ZEO가 ZODB 저장 (들)을 공유 할 수있는 전용 프로세스를 생성하기 :

    당신은이 선택 사항이 있습니다. 지침은 Using ZODB with ZEO을 참조하십시오.

  • RelStorage을 사용하여 Oracle, MySQL 또는 PostgeSQL에 오브젝트 데이터베이스를 저장하십시오.
+0

자, ZEO는 데이터베이스에 대한 일종의 프록시이며 아무 것도 손상시키지 않습니다. 나에게 좋은 소리. –

+0

@ LoïcFaure-Lacroix : 어느 방법으로도 문제가 발생하지 않습니다. 그러나 RelStorage에는 더 많은 인프라 (데이터베이스 서버)가 필요합니다. –

0

RelStorage를 사용할 수 있습니다.

pip install RelStorage 

... 또는 setup.py에 추가 사항이 필요합니다 섹션에서

requires = [ 
... 
RelStorage', 
] 

변경 developer.ini [응용 프로그램 : 주] :

[app:main] 
... 
zodbconn.uri = zconfig://%(here)s/relstorage.conf 

것은 파일을 만듭니다 'relstorage을. conf 내용을 다음 내용과 함께 사용하십시오.

%import relstorage 
<zodb main> 
    <relstorage> 
    <postgresql> 
     # The dsn is optional, as are each of the parameters in the dsn. 
     dsn dbname='zodb' user='zodbuser' host='yourhostname.net' password='YOURpassowrd' 
    </postgresql> 
    </relstorage> 
</zodb> 

'relstorage.conf'는 'developer.ini'와 동일한 폴더에 위치해야합니다.