2014-12-17 3 views
1

Plone 4.3.3을 하나의 사이트에 설치했습니다. 먼저 buildout은 var/filestorage의 Data.fs 파일과 var/blobstorage의 공유 blob 저장소를 사용하도록 구성되었습니다. 그런 다음 Buildout에 Relstorage를 추가하고 Data.fs 파일의 내용을 기본 MySQL 데이터베이스로 변환했습니다. 이제 Plone은 Data.fs. 대신 Relstorage를 사용하고 있습니다.Plone에서 Blob 저장소로 Relstorage를 사용하도록 구성

하지만 지금은 BLOB 저장소 대신 Relstorage도 사용하고 싶습니다. Plone과 Relstorage에 대해 상대적으로 새로운 사람이기 때문에 처음으로 새로운 Plone을 설치하는 것이 좋습니다. 그런 다음 buildout.cfg와 base.cfg를 첫 번째 것에서 새로운 것으로 복사했습니다. 그런 다음 새 데이터베이스 userZodb를 만들고 새 데이터베이스를 사용하기 위해 base.cfg를 변경했으며 zeoserver 및 클라이언트의 포트도 변경했습니다. 다음 단계는 파일 기반 BLOB 저장소를 사용하지 않기 위해 relstorage를 재구성하는 것이 었습니다.

rel-storage = 
    type mysql 
    db userZodb 
    user zodbuser 
    passwd innzop 
    blob-dir ${buildout:var-dir}/blobstorage 
    shared-blob-dir false 

# shared blobs are much faster if we're on the same server. 
# if not, turn it off. 
shared-blob = off 

그런 다음 빌드 아웃을 실행했습니다. 모든 것이 성공적으로 구축되었습니다. Zeoserver를 시작한 후 클라이언트에서이 오류가 발생했습니다.

[email protected]:~/Plone433-dev/zeocluster3$ ./bin/zeoserver start 
. 
daemon process started, pid=35136 
[email protected]:~/Plone433-dev/zeocluster3$ ./bin/client1 fg 
2014-12-17 14:50:31 INFO ZServer HTTP server started at Wed Dec 17 14:50:31 2014 
    Hostname: 0.0.0.0 
    Port: 9180 
2014-12-17 14:50:32 INFO Products.PloneFormGen gpg_subprocess initialized, using /usr/bin/gpg 
Traceback (most recent call last): 
    File "/home/user/Plone433-dev/zeocluster3/parts/client1/bin/interpreter", line 289, in <module> 
    exec(compile(__file__f.read(), __file__, "exec")) 
    File "/home/user/Plone433-dev/buildout-cache/eggs/Zope2-2.13.22-py2.7.egg/Zope2/Startup/run.py", line 76, in <module> 
    run() 
    File "/home/user/Plone433-dev/buildout-cache/eggs/Zope2-2.13.22-py2.7.egg/Zope2/Startup/run.py", line 22, in run 
    starter.prepare() 
    File "/home/user/Plone433-dev/buildout-cache/eggs/Zope2-2.13.22-py2.7.egg/Zope2/Startup/__init__.py", line 86, in prepare 
    self.startZope() 
    File "/home/user/Plone433-dev/buildout-cache/eggs/Zope2-2.13.22-py2.7.egg/Zope2/Startup/__init__.py", line 262, in startZope 
    Zope2.startup() 
    File "/home/user/Plone433-dev/buildout-cache/eggs/Zope2-2.13.22-py2.7.egg/Zope2/__init__.py", line 47, in startup 
    _startup() 
    File "/home/user/Plone433-dev/buildout-cache/eggs/Zope2-2.13.22-py2.7.egg/Zope2/App/startup.py", line 81, in startup 
    DB = dbtab.getDatabase('/', is_root=1) 
    File "/home/user/Plone433-dev/buildout-cache/eggs/Zope2-2.13.22-py2.7.egg/Zope2/Startup/datatypes.py", line 287, in getDatabase 
    db = factory.open(name, self.databases) 
    File "/home/user/Plone433-dev/buildout-cache/eggs/Zope2-2.13.22-py2.7.egg/Zope2/Startup/datatypes.py", line 185, in open 
    DB = self.createDB(database_name, databases) 
    File "/home/user/Plone433-dev/buildout-cache/eggs/Zope2-2.13.22-py2.7.egg/Zope2/Startup/datatypes.py", line 182, in createDB 
    return ZODBDatabase.open(self, databases) 
    File "/home/user/Plone433-dev/buildout-cache/eggs/ZODB3-3.10.5-py2.7-linux-x86_64.egg/ZODB/config.py", line 101, in open 
    storage = section.storage.open() 
    File "/home/user/Plone433-dev/buildout-cache/eggs/RelStorage-1.6.0b2-py2.7.egg/relstorage/config.py", line 33, in open 
    return RelStorage(adapter, name=config.name, options=options) 
    File "/home/user/Plone433-dev/buildout-cache/eggs/RelStorage-1.6.0b2-py2.7.egg/relstorage/storage.py", line 212, in __init__ 
    self.blobhelper = BlobHelper(options=options, adapter=adapter) 
    File "/home/user/Plone433-dev/buildout-cache/eggs/RelStorage-1.6.0b2-py2.7.egg/relstorage/blobhelper.py", line 118, in __init__ 
    fshelper.create() 
    File "/home/user/Plone433-dev/buildout-cache/eggs/ZODB3-3.10.5-py2.7-linux-x86_64.egg/ZODB/blob.py", line 359, in create 
    (self.layout_name, self.base_dir, layout)) 
ValueError: Directory layout `zeocache` selected for blob directory /home/user/Plone433-dev/zeocluster3/var/blobstorage/, but marker found for layout `bushy` 

불행 이러한 문제가 발생할 수있는 위치는 알 수 없습니다. 누구 제안? 감사합니다.

+0

이 뉴스는 어떤 것입니까? – Mathias

+0

@Mathias : 방금 내 솔루션을 추가했습니다. – Nicolas

답변

0

해결 방법은 zodbconvert를 다시 사용하는 것입니다. 올바르게 구성하면 하나의 스토리지에서 다른 스토리지로 변환 할 수 있습니다 (예 : Blobstorage에서 Relstorage로). 내 경우에는 구성은 다음과 같습니다 만 relstorage를 사용에 대한 귀하의 base.cfg 및 buildout.cfg을 변경해야 할 그 후

<filestorage source> 
    path  /home/user/Plone433-dev/zeocluster/var/filestorage/Data20141230.fs 
    blob-dir /home/user/Plone433-dev/zeocluster/var/blobstorage 
</filestorage> 

<relstorage destination> 
    shared-blob-dir false 
    # ZODB Cache Dir 
    blob-dir ./var/cacheblob 
    blob-cache-size 10mb 
    <mysql> 
    host localhost 
    db Zodb 
    user zodbuser 
    passwd XXXXXXXXX 
    </mysql> 
</relstorage> 

합니다. 여기서 정확히 작동하는 방법에 대한 자세한 정보를 찾을 수 있습니다. https://www.techidiots.net/notes/plone-1/plone-4-3-3-relstorage

0

relstorage을 사용하는 경우 blob 디렉토리는 여전히 캐싱에 사용됩니다 (Check for more infos). 귀하의 경우 디렉토리 레이아웃에 문제가 있습니다.

var 디렉토리를 $ {buildout : directory}에서 제거하고 buildout을 다시 실행할 수 있습니다. 그러면 새로운 var 디렉토리가 생성됩니다. 인스턴스를 시작한 후에 올바른 레이아웃의 새로운 blob 디렉토리가 있어야합니다.

또는

당신은 $에서 .layout 파일을 수정할 수 있습니다 {buildout : 디렉토리}은/var/blobstorage을하고 bushy에서 값을 변경 zeocache

설명 :

당신이 시작 처음 Plone 인스턴스에서 주어진 레이아웃으로 blobstorage 디렉토리를 생성합니다 - 귀하의 경우 기본값은 bushy입니다. 저장 용량을 변경 했으므로 zeocache이 필요합니다. 그러나 마커 파일 .layout은 자동으로 변경되지 않습니다.

이것이 도움이되지 않는다면 전체 buildout.cfg를 게시하십시오.