【问题标题】:Zope Management Interface know-how for better Plone developmentZope 管理界面专业知识,用于更好的 Plone 开发
【发布时间】:2011-02-23 23:12:26
【问题描述】:

作为定制 Plone 的典型“集成商”程序员,我应该了解有关 ZMI 的哪些信息以帮助我更有效地编写代码?哪些设置、工具、陷阱、快捷方式和暗角可以节省我的时间并帮助我编写更好的代码?

编辑: 认为我正在文件系统上编码,使用 GenericSetup 配置文件进行设置更改。我知道在 ZMI 中进行更改是一个坏主意,并且通常要避开。但有时 ZMI 确实很有用:用于检查工作流,或检查内容项的权限,或通过 portal_setup 仅安装配置文件的一部分。 ZMI真的没有什么值得了解的吗?或者里面还有其他有用的小花絮?

【问题讨论】:

    标签: plone zope


    【解决方案1】:

    在 ZMI 中有几个地方我发现自己会返回以获取诊断信息:

    • /Control_Panel/Database:选择 ZODB 挂载点。缓存参数选项卡显示您指定的 ZODB 缓存大小已使用了多少。活动选项卡显示有多少对象被加载到缓存并随着时间的推移而写入。

    • /Control_Panel/DebugInfo/manage:大量信息,包括显示当前每个线程正在处理的请求。 “缓存详细信息”和“缓存极端详细信息”链接提供有关当前 ZODB 缓存中对象类别的信息。

    • Plone 站点根目录的组件选项卡:查看注册了哪些本地适配器和实用程序的快速方法。不要点击应用按钮!

    • 大多数对象的撤消选项卡:查看最近谁提交了影响该对象的事务。

    • 安全选项卡:查看对对象实际有效的权限。您真的不想在 90% 的时间里更改权限;很难跟踪设置权限的位置,并且它们很可能被工作流程重置。使用 Plone UI 中的共享选项卡来分配本地角色。 (一个例外是我经常发现在特定上下文中启用特定类型的添加权限很方便。)在 Zope 2.12 中,此选项卡上有一个新功能可以输入用户名并查看权限和角色将在该用户的效果,这很方便。

    • portal_catalog 的目录选项卡:查看为特定路径存储了哪些索引数据和元数据。 (也可以从索引中删除虚假条目。)

    • portal_catalog 的索引选项卡:选择一个索引,然后单击其“浏览”选项卡以了解哪些键被索引以及哪些项目与每个键相关联。

    【讨论】:

      【解决方案2】:

      要知道的关键是,虽然许多 ZMI 工具提供了快速的通过 Web 的定制,但您通过这种方式进行的定制很难从数据库中导出。因此,它们不会轻易地从开发环境迁移到生产环境或从一个部署迁移到另一个部署。

      理想情况下,新开发人员应该使用 ZMI 来探索和找到干预点。然后,了解如何在策略附加组件(产品)中实现相同的更改,以更可重复地从一个部署转移到另一个部署。

      【讨论】:

        【解决方案3】:

        如果你想为 Plone 编写代码,最好避免 ZMI。通过 ZMI 做事的概念非常有限和不鼓励 - 越来越多的东西在那里不可用,并且在某个时候它会消失。

        实际的 Plone 控制面板为您提供了您可以使用的大部分配置选项。对于其他任何事情,文件系统都是最好的查看位置。

        【讨论】:

        • 我经常使用ZMI来详细检查Plone站点的状态。 portal_setup 工具也是 Plone 开发者工具包的重要组成部分。对于快速和肮脏的用例,CSS、图像和模板的 TTW 自定义可能很有价值。当然,总的来说,您是对的。
        【解决方案4】:

        我同意其他发帖者的观点,即您不应该通过 ZMI 进行过多配置,因为它不在版本控制中,您很容易忘记更改。

        但是 ZMI 对于调试和查看特定站点配置仍然非常有用。

        以下是我经常参考的 ZMI 中的一些工具:

        • portal_javascripts:关闭调试。检查哪个 脚本在那里,它们是什么 渲染条件,它们是 找到了吗?
        • portal_css:与 portal_javascripts 基本相同,但用于 样式表。
        • portal_types:查看类型的属性。是真的吗 在全球范围内创建?你可以什么类型 在里面创建吗?它的默认值是什么 看法?等等。
        • portal_catalog:有哪些索引?有哪些元数据 目录?您可以清除和重建 目录,甚至浏览 目录。
        • portal_workflow:什么是状态/转换/权限 在某个工作流程中?什么工作流在 某种类型?
        • portal_properties/site_properties:查看和设置站点范围的属性。一种 很多这些设置都在 plone_control_panel(即在 ZMI),但在这里他们是一个 页面和 ZMI 更快 导航。
        • portal_skins:查看安装了哪些皮肤文件夹。见 皮肤层的排序(通过属性选项卡)。您还可以编辑 皮肤目录中的模板、样式表和 JavaScript。 不建议!但对调试很有用。
        • portal_setup:一些非常大且复杂的 Plone 网站可能会崩溃,如果 您只是随意添加/删除/重新安装附加组件。通常只运行特定的 GenericSetup 更新会更安全。例如,如果您添加了一个新的 portlet,而不是 通过 portal_setup(导入选项卡)导入特定的 (portlets.xml) 步骤,然后重新安装整个产品。
        • portal_actions:配置可见/存在的操作。
        • portal_quickinstaller:快速重装、卸载插件。经常 比 加载克隆控制面板的 等价的。
        • acl_users:有时在使用 LDAPUserFolder 之类的插件时,您会 必须在 acl_users 中挖掘来配置和测试它。你也可以 在此处创建用户,尽管最好通过 Plone 执行此操作 控制面板(即不在 ZMI 中)

        在 ZMI 中有更多工具和东西可以调整(并破坏您的网站),但以上这些是我 90% 的时间使用的。

        【讨论】:

          【解决方案5】:

          portal_historystorage 工具会占用大量磁盘空间。任何设置为保存修订的内容类型都会将它们保存在这里,默认情况下 Plone 会保留所有修订(请参阅 portal_purgepolicy 工具)。

          我想要对生产 Data.fs 进行所有修订,但是在获取一份用于开发的副本后,我要做的第一件事是清除 portal_historagestorage。程序是:

          • 转到 ZMI 中的 Plone 站点
          • 删除 portal_historiesstorage 工具
          • 转到portal_setup,导入选项卡
          • 在“选择配置文件或快照”下选择“CMFEditions”
          • 使用处理程序 Products.GenericSetup.tool.importToolset 选择步骤
          • 取消选中“包含依赖项?”
          • 点击“导入选定的步骤”以重新添加 portal_historiesstorage
          • 打包 Data.fs 并从文件系统中删除生成的 Data.fs.old

          在我的 3G Data.fs 上,这个小序列删除了 2.5G!

          我只在开发 Data.fs 上做过这个。如果没有真正了解的人的建议,我不建议在您的生产网站上这样做。

          【讨论】:

          • 不要尝试删除 ZMI 中的工具。使用版本控制会创建更多数据,但要禁用版本控制,您应该转到类型控制面板,选择每种内容类型(如页面)并将版本控制策略从“自动”更改为“无版本控制”。
          • 我的建议是关于从开发数据库中删除版本控制数据。更改版本控制策略不会清除旧版本。同意,删除工具并不理想,但一次性 Data.fs 不会造成任何伤害。如果你知道如何安全地清除旧版本,我很想听听。
          【解决方案6】:

          集成商或开发人员通常没有理由接触 ZMI 其他可能的维护任务。几乎任何自定义都可以使用 Python 或 GenericSetup 配置文件来完成。配置文件的优点是:可重复性 - 能够在文件系统上维护 - 能够将文件置于修订控制之下。

          能够通过 ZMI 工作和配置东西的部分原因是反对 Plone - 特别是当 Plone 在后台做额外的事情时。所以唯一的建议可以是:如果可以的话,留下ZMI。 ZMI 不是使用 Plone UI 的合适替代品,只有在您真正知道自己在做什么时才应该触摸它。

          【讨论】:

            【解决方案7】:

            是的,ZMI 用于偶尔的维护任务,或者在按下时用于快速而肮脏的 CSS 或模板调整。它并不适用于任何真正的“编码”工作,在 Plone 的上下文中,最好将其视为 Zope 历史上的一个奇怪且极少有用的遗留物。

            【讨论】:

              【解决方案8】:

              portal_actions 对于更灵活的*导航也很有用。但最好还是通过 gnericsetup 配置。

              【讨论】:

                最近更新 更多