注意: 虽然 JavaScript 对于本网站不是必需的,但您与内容的互动将受到限制。请开启 JavaScript 以获得完整的体验。

EZRO 内容管理系统

引言

Development InfoStructure (devIS) 是一家位于弗吉尼亚州阿灵顿的小型咨询公司,以其在电子政务领域的工作而闻名。这包括开发小型、中型和大型系统。

devIS 的 EZ Reusable Objects (EZRO) 是一个内容管理系统,可用于多种不同类型的网站,包括传统的信息展示网站,例如 http://www.devis.com/;门户网站,例如 http://www.milspouse.org/;培训网站,例如 http://cable.devis.com/;以及教练式网站。教练式网站以屏幕边缘的框架形式出现,并驱动另一个网站,以引导用户浏览该网站,例如 http://www.careeronestopcoach.org/

EZRO 是 2001 年至 2004 年间与美国劳工部签订的多项合同的产物。它以 Workforce Connections 的名义开发。2004 年 1 月,devIS 将其版权捐赠给劳工部,允许劳工部将其作为开源工具发布。EZRO 是 Workforce Connections 软件的更高级版本,由 devIS 在 GPL 下发布。

EZRO Screenshot

EZRO 的存储库管理界面用于创作和管理基于它的网站内容。 放大

为什么选择 Python

EZRO 最初是作为劳工部 DisabilityInfo 门户网站的引擎而开发的,该门户网站最初名为 Disability.gov,后来更名为 DisabilityDirect.gov,现在是 DisabilityInfo.gov。该网站是一个门户网站,由劳工部、教育部、交通部、国防部、商务部以及社会保障局和卫生与公众服务部等主要机构的人员维护。作为实施机构的劳工部拥有最终编辑权。

当时需要一个内容管理系统,它允许分布式编辑和集中式编辑控制,并且必须对残疾人完全可访问。为了使事情进一步复杂化,布什总统的一份行政备忘录要求该网站在六十天内上线。虽然一些工作已经开始,并且该网站的前一个版本已经存在,但仍然有一个极其紧张的截止日期需要赶上。由于该网站是白宫强制要求的少数网站之一,因此必须一次性做好。

devIS 从项目一开始就决定我们的代码必须满足两个一般要求。首先,该软件最终应在满足最初截止日期后某个时候作为开源发布。其次,它必须足够便携才能在多个平台上运行。

Python 和 Zope(一个用 Python 编写的 Web 应用程序服务器)被选中用于这项工作。devIS 自 1999 年以来一直在使用 Zope,并且已经拥有大量精通 Zope 的开发人员,其中包括 ZopeLabs 的所有者和开发人员。

当时 devIS 仍然使用 Zope 的管理界面、DTML(动态模板标记语言)标签和简短的 Python 脚本来开发其 Web 应用程序,以创建动态网站。但 Zope 的管理界面并不是一个适合团队工作的良好环境:一个开发人员可能会在没有警告的情况下意外覆盖另一个开发人员的工作,并且没有足够的版本控制。

随着五个开发人员在此项目上投入半到全职工作,很明显需要一个更好的解决方案。自然而然的结论是开始使用 Zope 中可用的 Products 框架进行 Python 开发。Zope 产品是一个包含代码、图形和模板的软件包,提供了一个可重用的 Web 功能。我们能够将我们喜欢并日常使用的 Zope 集成组件(例如用户管理和简单的对象发布到 Web)与 Python 的灵活性及其庞大的内部库相结合。这还使我们能够将源代码保留在 Zope 对象数据库之外的文件系统上,在那里它可以与我们现有的 CVS 基础设施一起用于源代码控制和报告。

EZRO Architecture

EZRO 是用 Python 开发的,作为一个 Zope 产品。它与其他 Zope 产品交互,并使用 aspell 作为外部进程进行拼写检查。内容管理界面和已发布的 Web 内容通过 Apache 或其他 Web 服务器提供给用户。 放大

实施

EZRO 内容管理解决方案的开发始于一个假设,即应用程序会随着时间的推移而增长,就像大多数软件项目一样。最初的选择是在从头开始开发软件,还是使用现有的框架(如 Zope CMF 或 Plone)之间进行,这两个框架都在 EZRO 开始开发的同时首次发布。

在仔细审查了这些替代方案之后,决定开发一个新的解决方案将产生一个更紧密地根据客户需求和要求量身定制的产品,而不会因 CMF 或 Plone 中不需要的部分而产生大量的开销。

由于 Python 允许非常快速的开发,因此这个选择与 DisabilityInfo 项目最初非常紧张的截止日期并不矛盾。在两周内,一个可用的原型就准备好展示给客户了。第一个生产质量版本的软件仅用了额外的三周,直接在原型之上构建。

通过使用 Python,维护开销大大减少。在接下来的一年里,devIS 开发人员能够快速轻松地添加新的 EZRO 功能,以响应客户的请求。随着 devIS 获得新客户,EZRO 被用于降低新项目的开发成本。通过这种方式,该工具在功能和规模上都发展到了今天的样子。

Python 简洁的布局和结构也使得后来作为开源发布的代码更具可读性。这在引入新开发人员时非常有益,因为他们能够立即投入并理解代码。

由于 Python 的跨平台特性,EZRO 在 Microsoft Windows 和任何类 Unix 操作系统(包括 Linux 和 MacOS X)上运行同样良好。devIS 发布了一个带有 Windows 安装程序的独立 EZRO 环境,并以 tar 归档形式分发仅 EZRO Zope 产品用于其他环境。该软件确实依赖于 ZopeAspellPyXML,但由于 Python 的可移植性,所有这些第三方应用程序也在大多数其他操作系统上运行。

EZRO 可以很好地在单台机器上运行,但在 devIS 生产设施中,它部署在三台冗余服务器上用于面向公众的网站,以及第四台安全服务器用于管理后端。

结论

Python 和 Zope 一起为 devIS 提供了令人难以置信的灵活性,并允许以非常快速的周期实现新功能,这反过来又极大地取悦了 devIS 的客户。OSHA 培训学院正在使用 EZRO 开发其培训材料,他们告诉 devIS,他们每天在开发成本上节省了数千美元。作为额外的好处,使用它开发课程的人们实际上喜欢上班并使用这个工具。在其他任何工具集中,devIS 员工都没有发现如此简单的实现。

关于作者

Andy J. Williams Affleck 是 EZRO 的项目经理,M. Adam Kendall 是该项目的主要开发人员。Andy 拥有哈佛大学教育研究生院教育技术项目的教育硕士学位,并拥有多年为在线学习和教学创建解决方案的背景。Adam 是 zopelabs.com 的创建者,拥有数字设计学士学位,并拥有超过 9 年的 Web 编程经验。