此方法有助于创建和管理多个zope 2文件存储。

collective.recipe.filestorage的Python项目详细描述


详细文档

简介

这个配方会在zope.conf中添加额外的文件存储和zodb_db节。 以及plone.recipe.zope2instance和 扑通一声。菜谱。[zope2]Zeoserver菜谱。它还创建目录 将创建额外的文件存储数据文件。这使得添加 Zope2实例的附加文件存储和装入点。

支持的选项

< DL>
零件
要生成的文件存储子部件的列表,每行一个。(这是 与建筑部件不同。)
De> ZeO
plone.recipe.zope2zeoserver或plone.recipe.zeoserver部分到的名称 我们要添加额外的文件存储。默认为第一个这样的部分 如果有的话,在大楼里。
zopes
要添加到其中的plone.recipe.zope2实例部分的名称列表 额外的文件存储。默认为所有plone.recipe.zope2instance部分 连接到关联的zeoserver部分(如果有)或全部 plone.recipe.zope2如果没有找到zeo,则安装零件。

以下选项影响生成的zope.conf和zeo.conf。 为collective.recipe.filestorage中的所有文件存储子部分指定 构建部分,或为一个特定的文件存储子部分放置选项 在名为"文件存储"子部分的新构建部分中,其中子部分是名称 本配方"部分"选项中所列的子部分。的名称 子部分可通过在选项中使用"%(fs_part_name)s"进行插值。

< DL>
位置
data.fs文件相对于构建根目录的位置。 默认为var/filestorage/%(fs_part_name)s/data.fs
zodb名称
zodb的名称。默认为"%(fs_part_name)s"。
zodb缓存大小
设置zodb缓存大小,即zodb缓存的对象数 会努力坚持。从关联的zope部分继承。默认为 5000、
zodb安装点
设置安装点的路径。默认为"/%(fs_part_name)s"。
zodb容器类
设置要装入的对象的类。默认为未设置。
zeo地址
设置关联的zeo服务器的端口。从关联的 Zope和Zeo部分。默认为8100。
zeo客户端缓存大小
设置zeo客户端缓存的大小。从关联的zope继承 部分。默认为"30MB"。
zeo存储
设置zeo存储的id。默认为"%(fs_part_name)s"。
zeo客户名称
设置zeo客户端的名称。默认为"%(fs_part_name)s_zeostorage"。
zeo客户端
设置用于构造缓存的持久缓存名称 文件名。默认情况下,永久缓存文件被禁用。
blob存储
设置用于存储独立zope实例的blob的目录 或者Zeo服务器。可选的。不过,如果要存储blob,则需要。 推荐值:var/blobstorage-%(fs_part_name)s
zeo blob存储
设置用于存储zeo客户端blob的目录。默认为 使用与blob存储相同的值
zeo共享blob dir
布尔值,如果zeo共享blob dir,则该值应为"on" 服务器和客户端。默认为"开"。

示例用法

让我们创建并运行一个最小的构建,添加一个额外的文件存储:

>>> write('buildout.cfg',
... '''
... [buildout]
... extends = base.cfg
... parts =
...     filestorage
...     instance
...
... [instance]
... recipe = plone.recipe.zope2instance
... zope2-location = %(zope2_location)s
... user = me
...
... [filestorage]
... recipe = collective.recipe.filestorage
... parts =
...     my-fs
... ''' % globals())
>>> print system(join('bin', 'buildout') + ' -q')

我们的zope.conf应该自动将额外的文件存储节注入其中:

>>> instance = os.path.join(sample_buildout, 'parts', 'instance')
>>> print open(os.path.join(instance, 'etc', 'zope.conf')).read()
%define INSTANCEHOME...instance
...
<BLANKLINE>
<zodb_db my-fs>
    cache-size 5000
    <filestorage >
      path .../var/filestorage/my-fs/my-fs.fs
    </filestorage>
    mount-point /my-fs
</zodb_db>
<BLANKLINE>

配方还将为新文件存储创建一个目录:

>>> 'my-fs' in os.listdir(os.path.join(sample_buildout, 'var', 'filestorage'))
True

让我们确保在更改文件存储部分时会重新生成conf文件, 即使zope/zeo部件的直接配置没有改变:

>>> open('buildout.cfg', 'a').write("    my-fs-2\n")
>>> print system(join('bin', 'buildout') + ' -q')
>>> 'my-fs-2' in open('parts/instance/etc/zope.conf').read()
True
< >让我们确保即使删除了文件存储部分,也不会删除文件存储目录 从建筑物:

>>> write('buildout.cfg',
... '''
... [buildout]
... extends = base.cfg
... parts =
...     instance
...
... [instance]
... recipe = plone.recipe.zope2instance
... zope2-location = %(zope2_location)s
... user = me
... ''' % globals())
>>> print system(join('bin', 'buildout') + ' -q')
>>> 'my-fs' in os.listdir(os.path.join(sample_buildout, 'var', 'filestorage'))
True

我们可以覆盖许多设置的默认值:

>>> write('buildout.cfg',
... '''
... [buildout]
... extends = base.cfg
... parts =
...     filestorage
...     instance
...
... [instance]
... recipe = plone.recipe.zope2instance
... zope2-location = %(zope2_location)s
... user = me
...
... [filestorage]
... recipe = collective.recipe.filestorage
... location = var/filestorage/%(fs_part_name)s/Data.fs
... blob-storage = var/blobstorage-%(fs_part_name)s
... zodb-name = %(fs_part_name)s_db
... zodb-cache-size = 1000
... zodb-mountpoint = /%(fs_part_name)s_mountpoint
... zodb-container-class = Products.ATContentTypes.content.folder.ATFolder
... parts =
...     my-fs
... '''.replace('%(zope2_location)s', zope2_location))
>>> print system(join('bin', 'buildout') + ' -q')
>>> instance = os.path.join(sample_buildout, 'parts', 'instance')
>>> print open(os.path.join(instance, 'etc', 'zope.conf')).read()
%define INSTANCEHOME...instance
...
<BLANKLINE>
<zodb_db my-fs_db>
    cache-size 1000
    <blobstorage >
      blob-dir .../var/blobstorage-my-fs
      <filestorage >
        path .../var/filestorage/my-fs/Data.fs
      </filestorage>
    </blobstorage>
    mount-point /my-fs_mountpoint
    container-class Products.ATContentTypes.content.folder.ATFolder
</zodb_db>
<BLANKLINE>

也可以仅为一个特定的文件存储修改设置,方法是使用 文件存储前缀,如下所示:

>>> write('buildout.cfg',
... '''
... [buildout]
... extends = base.cfg
... parts =
...     filestorage
...     instance
...
... [instance]
... recipe = plone.recipe.zope2instance
... zope2-location = %(zope2_location)s
... user = me
...
... [filestorage]
... recipe = collective.recipe.filestorage
... parts =
...     my-fs
...
... [filestorage_my-fs]
... zodb-cache-size = 1000
... ''' % globals())
>>> print system(join('bin', 'buildout') + ' -q')
>>> instance = os.path.join(sample_buildout, 'parts', 'instance')
>>> print open(os.path.join(instance, 'etc', 'zope.conf')).read()
%define INSTANCEHOME...instance
...
<BLANKLINE>
<zodb_db my-fs>
    cache-size 1000
    <filestorage >
      path .../var/filestorage/my-fs/my-fs.fs
    </filestorage>
    mount-point /my-fs
</zodb_db>
<BLANKLINE>

默认情况下,配方会将额外的文件存储添加到构建中的每个plone.recipe.zope2instance部分, 但您可以告诉它只添加到某些部分:

>>> write('buildout.cfg',
... '''
... [buildout]
... extends = base.cfg
... parts =
...     filestorage
...     instance1
...     instance2
...
... [instance1]
... recipe = plone.recipe.zope2instance
... zope2-location = %(zope2_location)s
... user = me
...
... [instance2]
... recipe = plone.recipe.zope2instance
... zope2-location = %(zope2_location)s
... user = me
...
... [filestorage]
... recipe = collective.recipe.filestorage
... zopes = instance1
... parts =
...     my-fs
... ''' % globals())
>>> print system(join('bin', 'buildout') + ' -q')
>>> 'my-fs' in open('parts/instance1/etc/zope.conf').read()
True
>>> 'my-fs' in open('parts/instance2/etc/zope.conf').read()
False

使用zeo的示例

这是一个最小的构建,包括一个zeo服务器和两个zodb客户端:

>>> write('buildout.cfg',
... '''
... [buildout]
... extends = base.cfg
... parts =
...     filestorage
...     zeoserver
...     primary
...     secondary
...
... [zeoserver]
... recipe = plone.recipe.zope2zeoserver
... zope2-location = %(zope2_location)s
...
... [primary]
... recipe = plone.recipe.zope2instance
... zope2-location = %(zope2_location)s
... user = me
... zeo-client = 1
...
... [secondary]
... recipe = plone.recipe.zope2instance
... zope2-location = %(zope2_location)s
... user = me
... zeo-client = 1
...
... [filestorage]
... recipe = collective.recipe.filestorage
... parts =
...     my-fs
... ''' % globals())
>>> print system(join('bin', 'buildout') + ' -q')

这将导致对zeo.conf和zope.conf的适当添加:

>>> write('buildout.cfg',
... '''
... [buildout]
... extends = base.cfg
... parts =
...     filestorage
...     instance
...
... [instance]
... recipe = plone.recipe.zope2instance
... zope2-location = %(zope2_location)s
... user = me
...
... [filestorage]
... recipe = collective.recipe.filestorage
... parts =
...     my-fs
... ''' % globals())
>>> print system(join('bin', 'buildout') + ' -q')
0

如上所述,我们可以覆盖许多默认参数:

>>> write('buildout.cfg',
... '''
... [buildout]
... extends = base.cfg
... parts =
...     filestorage
...     instance
...
... [instance]
... recipe = plone.recipe.zope2instance
... zope2-location = %(zope2_location)s
... user = me
...
... [filestorage]
... recipe = collective.recipe.filestorage
... parts =
...     my-fs
... ''' % globals())
>>> print system(join('bin', 'buildout') + ' -q')
1

默认情况下,配方会将额外的文件存储添加到第一个 plone.recipe.zope2zeoserver部分在构建中,如果 使用此配方的部分不止一个。但是,您可以覆盖此 通过指定一个特定的zeo部分的行为。在本例中,文件存储 将仅使用该zeo添加到zopes,默认情况下:

>>> write('buildout.cfg',
... '''
... [buildout]
... extends = base.cfg
... parts =
...     filestorage
...     instance
...
... [instance]
... recipe = plone.recipe.zope2instance
... zope2-location = %(zope2_location)s
... user = me
...
... [filestorage]
... recipe = collective.recipe.filestorage
... parts =
...     my-fs
... ''' % globals())
>>> print system(join('bin', 'buildout') + ' -q')
2

错误条件

重要提示:必须使用 collective.recipe.filestorage recipe用于实例和 要将文件存储添加到的ZeoServer。否则你会得到 错误:

>>> write('buildout.cfg',
... '''
... [buildout]
... extends = base.cfg
... parts =
...     filestorage
...     instance
...
... [instance]
... recipe = plone.recipe.zope2instance
... zope2-location = %(zope2_location)s
... user = me
...
... [filestorage]
... recipe = collective.recipe.filestorage
... parts =
...     my-fs
... ''' % globals())
>>> print system(join('bin', 'buildout') + ' -q')
3

具有多个zeoserver部件的构建将导致 如果未明确指定要关联的zeo,则出错:

>>> write('buildout.cfg',
... '''
... [buildout]
... extends = base.cfg
... parts =
...     filestorage
...     instance
...
... [instance]
... recipe = plone.recipe.zope2instance
... zope2-location = %(zope2_location)s
... user = me
...
... [filestorage]
... recipe = collective.recipe.filestorage
... parts =
...     my-fs
... ''' % globals())
>>> print system(join('bin', 'buildout') + ' -q')
4

指定不存在的zeo将导致错误:

>>> write('buildout.cfg',
... '''
... [buildout]
... extends = base.cfg
... parts =
...     filestorage
...     instance
...
... [instance]
... recipe = plone.recipe.zope2instance
... zope2-location = %(zope2_location)s
... user = me
...
... [filestorage]
... recipe = collective.recipe.filestorage
... parts =
...     my-fs
... ''' % globals())
>>> print system(join('bin', 'buildout') + ' -q')
5

所以应该指定一个不存在的zope部分:

>>> write('buildout.cfg',
... '''
... [buildout]
... extends = base.cfg
... parts =
...     filestorage
...     instance
...
... [instance]
... recipe = plone.recipe.zope2instance
... zope2-location = %(zope2_location)s
... user = me
...
... [filestorage]
... recipe = collective.recipe.filestorage
... parts =
...     my-fs
... ''' % globals())
>>> print system(join('bin', 'buildout') + ' -q')
6

如果zope/zeo部件是自动识别的,那么让我们确保 我们不会意外地"唤醒"那些原本不会 包含在构建中:

>>> write('buildout.cfg',
... '''
... [buildout]
... extends = base.cfg
... parts =
...     filestorage
...     instance
...
... [instance]
... recipe = plone.recipe.zope2instance
... zope2-location = %(zope2_location)s
... user = me
...
... [filestorage]
... recipe = collective.recipe.filestorage
... parts =
...     my-fs
... ''' % globals())
>>> print system(join('bin', 'buildout') + ' -q')
7

确保使用"extends"在构建中正确找到实例部分 +=或-=选项:

>>> write('buildout.cfg',
... '''
... [buildout]
... extends = base.cfg
... parts =
...     filestorage
...     instance
...
... [instance]
... recipe = plone.recipe.zope2instance
... zope2-location = %(zope2_location)s
... user = me
...
... [filestorage]
... recipe = collective.recipe.filestorage
... parts =
...     my-fs
... ''' % globals())
>>> print system(join('bin', 'buildout') + ' -q')
8

运行测试

collective.recipe.filestorage的subversion签出包括一个buildout 安装用于运行测试的脚本。

只需运行:

>>> write('buildout.cfg',
... '''
... [buildout]
... extends = base.cfg
... parts =
...     filestorage
...     instance
...
... [instance]
... recipe = plone.recipe.zope2instance
... zope2-location = %(zope2_location)s
... user = me
...
... [filestorage]
... recipe = collective.recipe.filestorage
... parts =
...     my-fs
... ''' % globals())
>>> print system(join('bin', 'buildout') + ' -q')
9

已知问题:测试在一个单独的进程中运行,因此当前 无法在配方中设置PDB断点并在测试期间进行调试。 如果需要这样做,请设置另一个使用collective.recipe.filestorage的构建 作为一个发展的蛋。

报告错误或提出问题

Launchpad上有一个共享的BugTracker和帮助台: https://bugs.launchpad.net/collective.buildout/

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法在未设置数据源的情况下启动springboot应用程序   返回/泛型的类型?   java通过在navigationView中按id重新加载navigationView内容   java实现安卓的状态更新   java Equals()对于两个相等的字符串不返回true   java如何保存屏幕截图(matlab)   java GWT如何在重新加载页面之前确保函数已完全执行   java在Groovy中实现ObjectJSON映射的标准方法是什么?   java在ApacheTomcat中,是否可以通过连接器过滤多个访问日志文件?   java当JVM达到其Xmx限制时,它会强制垃圾收集吗?   如何在JAVA中生成包含特定数字的不同随机数列表?   rcp中透视图之间的java切换   java理解名为“分区”的Linkedlist算法中的无限循环   RestTemplate的java测微计统计信息   Android中使用自定义服务BLE的java读/写特性   java验证输入以确保负数   关于Java扫描器的io基本查询   java如何使用子字符串或其他函数将字符串拆分为单词?   java Storm群集重复元组