Сконфигурируйте Plone для использования Relstorage в качестве blobstorage

У меня есть установка Plone 4.3.3 с одного сайта. Сначала была настроена сборка для использования файла Data.fs в var/filestorage и общего хранилища больших двоичных объектов в var/blobstorage. Затем я добавил Relstorage в компоновку и преобразовал содержимое файла Data.fs в базовую базу данных MySQL. Теперь Plone использует Relstorage вместо Data.fs.

Но теперь я хочу также использовать Relstorage вместо blobstorage. Поскольку я относительно новичок в Plone и особенно в Relstorage, моя идея состояла в том, чтобы сначала установить новый пустой Plone. Затем я скопировал buildout.cfg и base.cfg из первого в новый. Затем я создал новую базу данных userZodb и изменил base.cfg для использования новой базы данных, а также изменил порты для zeoserver и клиентов. Следующим шагом было перенастроить 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 я получил эту ошибку от клиента:

user@server:~/Plone433-dev/zeocluster3$ ./bin/zeoserver start
. 
daemon process started, pid=35136
user@server:~/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`

Неудача Я понятия не имею, где проблема может быть. Есть предложения? Спасибо!

2 ответа

Решение

Решением было снова использовать zodbconvert. При правильной настройке он может конвертировать из одного хранилища в другое, например из Blobstorage в Relstorage. В моем случае конфигурация выглядит так:

<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>

После этого вы должны изменить ваши base.cfg и buildout.cfg для использования только relstorage. Вы можете найти больше информации о том, как именно это работает здесь: https://www.techidiots.net/notes/plone-1/plone-4-3-3-relstorage

Если вы используете relstorage каталог blob все еще используется для кэширования ( проверьте, есть ли больше информации). В вашем случае есть проблема с вашим макетом каталога.

Вы можете удалить отверстие var каталог в ${buildout:directory} и перезапустите buildout. Это создаст вам новый каталог var. После запуска экземпляра у вас должен быть новый каталог BLOB-объектов с правильной компоновкой.

ИЛИ ЖЕ

Вы можете изменить .layout файл в ${buildout:directory}/var/blobstorage и измените значение с bushy в zeocache

Объяснение:

При первом запуске экземпляра Plone он создает каталог blobstorage с заданным макетом - в вашем случае это был стандарт bushy, Так как вы изменили хранилище, он ожидает zeocache, Но файл маркера .layout не изменяется автоматически.

Если это не поможет, пожалуйста, напишите свой полный buildout.cfg.

Другие вопросы по тегам