2

ZenPack 的开发似乎涉及到各种持久化状态的创建。有一些模型类可以显式地表示持久状态。有一些与模型对象相关联的皮肤。有持久类(数据源、图表等)的组织者和实例。

考虑到在开发过程中,很多事情在做对之前就做错了,并且考虑到加载一个做错事的 ZenPack 会对它加载到的 Zenoss 实例产生持久的影响,并且这些后果很难撤消,什么是开发 ZenPack 的常用方法?

4

2 回答 2

2

本周我正在使用 Zenoss 3.1 解决这个问题。

警告 - 如果你制作了一个糟糕的zenpack - 不用等待 -你制作一个糟糕的 zenpack 时,它可能会卡在 Zope 的数据库中,并且无法将其从 AFAIK 中取出。所以-

首先使用 GUI 对干净的 Zenoss 站点进行完整备份。

稍后您将需要使用 zenrestore 进行恢复以清理混乱。

我认为有两个答案:

1)如果它是一个portlet-

Portlet 只能使用 egg 安装。通常 Zenoss 文档建议您使用 GUI 界面创建鸡蛋,但这会导致开发迭代荒谬。但是,文档中有其他方式的解释。如果您的代码(可能从 Show Graph 或 Google Maps 等知名社区 portlet 开始)对于 portlet 而不是常规 zenpacks 是正确的,那么

  • 您以标准 zenpack 形式命名代码的顶级目录,并带有版本。

  • cd 进入该目录并运行

python setup.py bdist_egg

这将创建 dist 和 build 目录。

  • 鸡蛋将在 dist 目录中。

  • 使用 GUI 安装 egg。

  • 注意它没有完全安装...... grrrrrr。

  • 重新启动守护程序 -zopectl restart ; zenhub restart

  • 测试。

  • 使用 GUI 删除 portlet。重复。

陷阱: - 你必须有 setup.py 并且可能有一个或多个 - INSTALL.txt MANIFEST.in README.txt 在顶层目录中。

  • Setup.py 必须与您的目录名称匹配。

  • 如果您使用旧的或复制的init .py 文件及其init .pyc 版本,则可能需要删除这些 pyc 文件以强制 python 脚本重新创建它们。

  • 为了确定,我喜欢按如下方式运行脚本: rm -f ./dist ./build ; python setup.py bdist_egg

2)如果是普通的zenpack

文档告诉你如何做到这一点。

  • 从任何来源安装您的 zenpack;通常你会从 GUI 创建的空白开始。

  • 将文件复制/usr/local/zenoss/zenoss/Zenpacks/yourzenpack到您的代码开发区域。

  • 使用 GUI 卸载 zenpack。

  • 以 zenoss 用户的身份在命令行上,运行 zpack install --link 命令(查找语法)以安装实际上在您的代码区域中的 zenpack。

  • 测试

  • 更新您的代码。

  • 在命令行上作为 zenoss,运行zopectl restart ; zenhub restart

  • 测试。

  • 重复。要开心。

于 2011-08-11T21:21:22.833 回答
2

我对 Zenoss 一无所知,但这种情况对于任何具有一种或另一种形式的持久配置的系统都很常见,例如 Zope 和 Plone。

工作流程是您创建一个可以删除和复制的测试环境,但可以部分和整体进行。例如,对于一个典型的 Plone 站点,您有一个构建可以让您复制包括所有依赖项的开发环境。然后在您开发的扩展模块中,您有一个脚本/函数,允许您根据需要设置持久配置。

这使您能够轻松地重新创建所需的状态。

您还有工作流程“阶段”。开发,通常在每个开发人员的本地机器上完成。登台/测试,在测试服务器上完成。这是通过将生产机器的持久状态复制到登台机器,然后运行任何设置/升级脚本并确保一切正常来完成的。最后升级生产服务器。

于 2009-10-15T15:49:53.947 回答