锻造车间 - Bricolage 警报
上个月,我们开始研究由 David Wheeler 编写的、基于 mod_perl、HTML::Mason 和 PostgreSQL 的强大开源 Bricolage 内容管理系统 (CMS)。内容管理软件是一种相对较新的 Web 应用程序类型,旨在使管理大型网站成为可能。Bricolage 已被广泛誉为新的开源成功案例,证明专有软件不一定比其免费软件 counterparts 更灵活或更强大。
重要的是要记住,虽然 CMS 是一个基于 Web 的应用程序,它依赖于动态生成的服务器端程序,但 CMS 的输出通常是一个静态站点。因此,即使 Bricolage 是一个大型 Web/数据库程序,并且自定义 Bricolage 需要服务器端编程技能,但它实际上是一个旨在供非程序员日常使用的应用程序。事实上,从 Salon.com 到 MacWorld 在线版等组织目前都在使用 Bricolage。成千上万的其他网站,从 CNet 到 LinuxJournal.com,都在使用内容管理解决方案,范围从 Vignette(复杂、专有且昂贵)到 PHPNuke(简单、开源且免费)。
本月,我们将着眼于我最喜欢的 Bricolage 功能之一:警报,它允许用户跟踪 Bricolage 系统上的不同活动。警报不仅让我们了解正在发生的事情,而且还提供了一个很好的方式来了解系统是如何工作的——通过查看对象列表,可以对每个对象采取的操作,以及了解警报何时实际被触发。
Bricolage,像大多数 CMS 软件一样,通过管道中的工作站来移动文章。在 Bricolage 中,这些工作站被称为 desks(编辑部),反映了该软件在新闻界的起源。因此,故事从编辑部开始,移动到文案编辑部,然后到法务编辑部,最后到发布编辑部,从那里它们实际上可以发布到 Web 上。
在一个由少数人管理的小型网站上,很容易跟踪哪些文章放在哪里。但是,一旦人数或文章数量超过一定规模,就很难跟踪每篇文章的进展情况。
处理此工作流程的一种方法是逐个查看各个编辑部,查看每个编辑部有哪些故事,然后采取适当的行动。但是,这种查看可能会变得乏味,您可能希望跟踪新闻类别中的故事或特定作者的故事,而不是所有故事。此外,如果能通过电子邮件接收工作流程事件的通知就更好了。
此功能存在于 Bricolage 中,并且以真正的开源方式,它可以被惊人地自定义。要创建或修改警报,请单击屏幕右下角系统菜单下的“alert types”菜单项。这是管理菜单之一,意味着只有具有管理权限的用户才能访问。出现的屏幕,就像 Bricolage 中的大多数其他管理屏幕一样,允许您按名称搜索警报或查看以特定字母开头的所有警报。
您可以通过单击“create new alert type”链接来创建新的警报类型。这将弹出一个简短的 HTML 表单,要求您标识要放置警报的 Bricolage 对象。因此,如果您希望在故事发生某些事情时收到警报,请请求关于故事的警报。如果您希望在新用户添加到系统时收到警报,请请求关于用户的警报。简而言之,Bricolage 中的几乎任何对象都可以置于警报之下。
举例来说,让我们创建一个警报,以告知我们任何标题中带有“Linux”的故事何时从一个编辑部移动到另一个编辑部。再次强调,Bricolage 使我们能够轻松监控任何对象。然而,这无疑是最常见的警报类型之一。
我们现在从管理菜单中选择“create new alert type”,然后在 Story 对象上创建一个新警报。然后,我们看到了 Bricolage 可以为我们监视的操作列表,范围从“category added to story”到“story published”到“element deleted from story”。对于此示例,我们选择“Story moved to desk”并将其命名为“Linux story moved”。
每种警报类型都必须有一个所有者;在本例中,所有者是我,因为我以我自己的身份登录。Bricolage 最初创建的唯一用户,其登录名是 admin,被称为 Bricolage Administrator。此 admin 用户应被视为与 UNIX root 用户相同。它当然可以拥有警报,但您最好创建其他用户(使用左下角的 admin/user 菜单),给自己管理权限,然后以您自己的身份而不是以管理员身份登录。
无论如何,单击此页面底部的“next”按钮会将您带到主警报类型编辑屏幕,该屏幕用于创建新的警报类型和修改现有的警报类型。每个警报有四个部分
属性:警报类型的名称和所有者,我们在上一页输入了这些信息。
规则:何时触发警报的描述。每个规则都包含一个变量(从下拉菜单中选择,从而避免了拼写错误的可能性)、一个比较测试和一个您可以输入比较值的文本字段。
内容:发送给警报接收者的电子邮件消息。这可以包括许多不同的变量,从故事的标题到其发布日期。
接收者:应该接收警报的用户和组,如果警报被触发。您可以将警报发送给所有编辑、所有作者,或者发送给 George 和 Frank,但不发送给 Deborah 和 Mary。
规则可能是 Bricolage 警报系统最有趣的部分,因为非程序员可以相对容易地创建和编辑它们。但是,对于 =~ 和 !~ 运算符,存在潜在的危险,Perl 程序员应该将其识别为正则表达式的指示符。这显然是一把双刃剑,因为正则表达式对于开明人士来说可能非常强大,而对于无知者来说则极其危险(且令人沮丧)。
因此,我们可以通过从左侧的属性列表中选择“Story title”,从比较运算符列表中选择 =~,并在文本字段中输入“Linux”作为值来创建我们的警报,从而得到
Story title =~ Linux
我们必须使用 =~ 而不是 =,因为我们想在标题的任何部分查找“Linux”,而不是匹配整个标题。如果我们对“Linux”或“Perl”都感兴趣,我们将搜索
Story title =~ Linux|Perl
经验丰富的 Perl hackers 可能会惊喜地发现,这里的 =~ 和 !~ 是不区分大小写的。
警报的主题和文本可以包含您希望的任何文本,包括 Bricolage 为我们定义的插值 Perl 变量。在一个很好的 JavaScript 应用中,Bricolage 允许您从选择列表中选择变量,从而避免了拼写错误和其他错误的可能性。此外,这是一个方便的参考,因此您无需记住使用故事时可用的所有变量名称。通过这种方式,我们可以将警报的主题设置为
The story $title was just moved to $desk
然后,警报消息的正文包含不同的消息,但它也可以包含变量。例如,您可以将警报设置为读取
You asked to be notified when Linux-related articles are moved to a new desk. Well, $trig_full_name just moved "$title" to the $desk desk. I hope you're happy now.
当警报触发时,其消息将以两种不同的方式发送给所有指定的接收者。一封电子邮件将发送给每个注册用户,使用我们上面定义的消息通知他们更改已发生。但是 Bricolage 还在其数据库中跟踪这些项目,从而可以轻松地通过 Web 跟踪警报。例如,如果从我们上面描述的与 Linux 相关的项目触发了警报,我们会通过电子邮件收到指示。但是,我们也可以在“my alerts”页面上看到我们收到的所有警报的摘要,您可以通过单击每个屏幕顶部的“my alerts”按钮访问该页面。
警报会一直保留在此屏幕上,直到它们被确认。警报屏幕并非旨在成为长期存储系统;相反,它是一个简单的消息传递代理,允许编辑查看最近发生在网站上的所有相关事件。
您可以通过在“my alerts”页面中单击一个或多个复选框,然后在列表底部选择“acknowledge checked”按钮来确认并删除警报。您也可以一次确认所有警报,而无需使用复选框,只需单击“acknowledge all”按钮即可。
如果我是一个中型网站的编辑,我将花费大量时间定义警报,这些警报可以让我知道何时发生了重要事件,例如作者何时将项目发送到我的编辑部。
警报是 Bricolage 为适当用户带来相关信息的绝佳且实用的方法,而不是强迫用户去寻找信息。但是,这些警报的一个附带好处是,它们可以帮助新的 Bricolage 管理员和程序员了解系统中不同对象上可能发生的各种操作。一个简单的例子是 user 对象:我们可以创建一个警报,每当用户被创建或停用、更改其设置或更改其密码时通知我们。这种警报对于编辑来说显然不有趣,但对于系统管理员来说可能至关重要。
一个更复杂的例子是 template 对象,这将在下个月讨论。模板定义了故事的显示方式,因此跟踪它们以及对其进行的任何修改非常重要。因此,与用户相比,有更多项目与模板相关联——您可以跟踪模板何时部署、何时编辑,甚至何时移动到其编辑部。事实上,如果您以前不了解模板也有自己的编辑部,就像故事一样,警报系统会向您澄清这一点。
我个人从不同角度(包括警报定义)深入研究系统中学到了很多关于 Bricolage 的知识。如果您是 Bricolage 的新手,并且在阅读文档和展开所有菜单(如果您要查看 Bricolage 站点的不同部分在哪里定义以及谁有权设置它们,这至关重要)后,仍然不太清楚一切是如何工作的,那么查看警报定义会使事情更清晰。此外,如果您不确定系统中如何处理特定对象,您可以随时在该对象上创建并注册警报,一旦您了解了它的工作原理就禁用它。
正如我们上个月看到的,Bricolage 是一个大型且复杂的系统。警报使相关信息能够主动推送给您,使您无需在多个不同的屏幕上搜索。虽然警报只是 Bricolage 系统的一小部分,但它们提供了对其深度和广度以及不同对象可用选项的有趣视角。
资源
关于 Bricolage 的主要信息来源是该项目的网站,网址为 bricolage.cc。该网站有指向可下载源代码(托管在 SourceForge)、文档和 Bugzilla (bugzilla.bricolage.cc) 的链接,用于错误报告和功能请求。
SourceForge 托管了几个 Bricolage 邮件列表,开发人员积极参与其中。如果您有疑问或想了解新版本,您可以从 SourceForge 页面 (sourceforge.net/projects/bricolage) 订阅。
Bricolage 文档通常非常好,但技术性很强。O'Reilly and Associates 出版了一本更用户级别的系统介绍,作为最近出版的关于 Mason 的书的附录。您可以在线阅读该附录,网址为 www.masonbook.com/book/appendix-d.mhtml。
有关 PostgreSQL 的更多信息,请访问项目的主站点 www.postgresql.org。有关 Apache 的更多信息,请访问 httpd.apache.org。要了解有关 mod_perl 的更多信息,请访问 perl.apache.org。请记住,Apache 2.x 和 mod_perl 2.x 都不适合 Bricolage,尽管在您阅读本文时情况可能会发生变化。您可以从 Mason 图书站点 (www.masonbook.com) 和 Mason 主页 (www.masonhq.com) 了解有关 Mason 的更多信息。
最后,您可以在 david.wheeler.net 了解有关 David Wheeler(Bricolage 的主要作者和维护者)的更多信息,并在 www.kineticode.com 了解有关他的公司 Kineticode 的更多信息。
Reuven M. Lerner (reuven@lerner.co.il) 是一位专门从事开源 Web/数据库技术的顾问。他和他的妻子 Shira 最近庆祝了他们的第二个女儿 Shikma Bruria 的诞生。Reuven 的著作 Core Perl 于 2002 年初由 Prentice Hall 出版,第二本关于开源 Web 技术的书将于 2003 年由 Apress 出版。