2009-10-15 66 views
2

ZenPack开发似乎涉及创建各种持久状态。有表示持久状态的模型类。有与模型对象关联的皮肤。有组织者和持久类的实例(数据源,图表等)。什么是Zenoss ZenPack开发的典型工作流程?

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

回答

2

我对Zenoss没有什么特别的了解,但是这种情况对于任何一种形式持久化配置的系统来说都很常见,例如Zope和Plone。

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

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

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

+0

我希望有一些更模块化或轻量级的东西(即“快”)。不过,我认为这不是事情有时候的方式。我从此停止了与Zenoss的合作,所以我没有机会通过这个来看看它是如何工作的。不过,由于没有其他人表示支持,我猜想这可能是Zenoss开发所期望的。谢谢。 – 2009-12-02 17:06:40

+0

您能否向我们提供一些如何制作ZODB副本的提示? – Bunyk 2014-06-27 10:50:18

+0

@Bunyk:你复制Data.fs文件。请注意,应用程序也可以将数据存储在Data.fs文件之外。例如,Plone将图像和文件存储在您必须复制的blobstorage目录中。 – 2014-06-29 18:22:10

2

本周我正在用Zenoss 3.1处理这个问题。

Caveat- 如果你做一个坏的zenpack - 无需等待 - 你犯了一个糟糕的一个,它可能会卡在Zope的数据库,有没有办法把它弄出来AFAIK。所以 -

首先使用GUI做一个干净的Zenoss站点的完整备份。

以后你需要使用zenrestore来恢复清理垃圾。

有两个答案,我想:

1)如果只能用一个鸡蛋可以安装它的一个portlet-

的Portlet。通常Zenoss文档建议你使用GUI界面来创建鸡蛋,但是这使得开发迭代变得荒谬。但是在其他方面的文档中有解释。如果你的代码,可能开始一个众所周知的社区门户像显示图形或谷歌地图,是门户正确的,而不是常规的zenpacks,然后

  • 你的名字你的代码的标准zenpack的顶级目录表格, 与版本。

  • cd进入这个目录并运行

python setup.py bdist_egg

,这将创造DIST并建立目录。

  • 鸡蛋将在dist目录中。

  • 使用GUI安装鸡蛋。

  • 注意其未完全安装... grrrrrr。

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

  • 测试。

  • 使用GUI删除portlet。重复。

陷阱: - 必须setup.py,并在顶级目录,也许一个或多个OF- INSTALL.TXT MANIFEST.in的README.txt。

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

  • 如果使用旧的或复制与他们初始化初始化 .py文件 .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

  • 测试。

  • 重复。要开心。