Сконфигурируйте 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.