Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将Plone配置为将Relstorage用作blobstorage_Mysql_Plone_Plone 4.x_Blobstorage_Relstorage - Fatal编程技术网

Mysql 将Plone配置为将Relstorage用作blobstorage

Mysql 将Plone配置为将Relstorage用作blobstorage,mysql,plone,plone-4.x,blobstorage,relstorage,Mysql,Plone,Plone 4.x,Blobstorage,Relstorage,我安装了Plone 4.3.3,其中有一个站点。首先,将构建配置为使用var/filestorage中的Data.fs文件和var/blobstorage中的共享blob存储。然后,我向构建中添加了一个Relstorage,并将Data.fs文件的内容转换为底层MySQL数据库。现在Plone使用的是Relstorage,而不是Data.fs 但现在我还想使用Relstorage而不是blobstorage。因为我对Plone比较陌生,尤其是在重新存储方面,我的想法是首先设置一个新的空Plone

我安装了Plone 4.3.3,其中有一个站点。首先,将构建配置为使用var/filestorage中的Data.fs文件和var/blobstorage中的共享blob存储。然后,我向构建中添加了一个Relstorage,并将Data.fs文件的内容转换为底层MySQL数据库。现在Plone使用的是Relstorage,而不是Data.fs

但现在我还想使用Relstorage而不是blobstorage。因为我对Plone比较陌生,尤其是在重新存储方面,我的想法是首先设置一个新的空Plone。然后我将buildout.cfg和base.cfg从第一个复制到新的。然后,我创建了一个新的数据库userZodb,并更改了使用新数据库的base.cfg,还更改了zeoserver和客户端的端口。下一步是重新配置relstorage,使其不使用基于文件的blobstorage

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`
不幸的是,我不知道问题出在哪里。有人有什么建议吗? 谢谢大家!

如果使用relstorage,blob目录仍用于缓存。在您的情况下,目录布局有问题

您可以删除${buildout:directory}中的hole var目录,然后重新运行buildout。 这将为您创建一个新的var目录。启动实例后,您应该有一个布局正确的新blob目录

您可以修改${buildout:directory}/var/blobstorage中的.layout文件,并将值从bushy更改为zeocache

说明:

第一次启动Plone实例时,它使用给定的布局创建blobstorage目录——在您的示例中,它是默认的bushy目录。因为您更改了存储,所以它需要zeocache。但是标记文件.layout不会自动更改


如果这没有帮助,请发布您的完整buildout.cfg

解决方案是再次使用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。你可以在这里找到更多关于它工作原理的信息:

这方面有什么消息吗?@Mathias:我刚刚添加了我自己的解决方案。