OpenACS

作者:Reuven M. Lerner

还不需要花费太多力气就能回忆起互联网泡沫时代,那时你可以为一家几乎什么都做的公司获得融资。在那段时期的开始,当互联网正在成为主流媒体时,有很多关于在线社区的讨论。这些类型的社区对于互联网老手来说并不新鲜,他们在 Web 出现在舞台上很久之前就已经参与了 Usenet。但它们看起来对于风险资本家和企业家来说是一个绝佳的机会,他们将在线社区视为一个潜在的巨大市场。

与许多这样的想法一样,一切都很棒,除了商业模式。如今存在成千上万个在线社区,所有这些社区都使来自世界各地的人们有可能就某个主题分享信息和想法。尽管很少有网站设法围绕这些社区建立业务,但毫无疑问,此类软件是当今网络基础设施的重要组成部分。

使用关系数据库和编程语言创建在线社区并不困难,但是在一个月内创建你的第十个 Web/数据库用户管理系统对于开发人员来说是令人恼火的,对于客户来说是昂贵的。此外,当站点想要添加新功能时会发生什么?如果新功能和修复的错误可以反映在你所有的站点中,而不仅仅是在你进行更改的站点中,那就太好了。

精彩著作《Philip and Alex's Guide to Web Publishing》的作者 Philip Greenspun 在 20 世纪 90 年代中期就意识到了这一切,当时将 Web 和数据库结合起来仍然是一个相对较新的想法。他的解决方案是创建一套应用程序,这些应用程序考虑了尽可能多的在线社区的需求。他创建的软件工具包构成了他在麻省理工学院博士论文的基础。它也是他创立的网络咨询公司 ArsDigita 的基础。当 ArsDigita 社区系统 (ACS) 最终发布时,Greenspun 根据 GNU 通用公共许可证 (GPL) 使其可用。

与许多网络咨询公司一样,ArsDigita 从未完全兑现其承诺。在经历了数年的飞速成功之后,投资者被引入以进一步扩展公司。Greenspun 被迫离开;该公司发布了两个半生不熟版本的 ACS(包括一个用 Java 编写的版本,该版本基本上重写了整个系统);大部分员工被解雇,最终,Red Hat(与 ArsDigita 的投资者相同)聘请了一些程序员并购买了该公司剩余的少量资产。

如果 ArsDigita 是一家专有软件公司,那么这将是故事的结局。但是,由于 ACS 是在 GPL 下获得许可的,因此社区接管了公司未完成的工作。更重要的是,社区已经在开发 ACS 的一个版本,称为 OpenACS,它将使用 PostgreSQL 关系数据库而不是 ACS 默认数据库 Oracle。(本文假设您希望使用 PostgreSQL;如果您希望使用 Oracle,则说明仅略有不同。)

OpenACS 4.5,作为第一个生产版本被标记,于今年 6 月发布。它被重命名为“开放架构社区系统”,以反映 ArsDigita 不复存在的事实。但是 Greenspun 的影响力在 OpenACS 社区中被深刻感受到,ArsDigita 员工编写的大量代码和文档帮助推动了该项目向前发展。

本月,我们将开始对 OpenACS 进行扩展介绍,OpenACS 是当今可用的更强大的(如果相对不为人知)开源 Web 工具包之一。在接下来的几个月中,我们将研究如何安装 OpenACS、如何使用其模板系统创建动态页面以及如何在代码和管理有限的情况下创建复杂的在线社区。

什么是 OpenACS?

很容易说 OpenACS 是一个用于创建在线社区的工具包。但这意味著什么?首先,这意味着 OpenACS 附带了您可能希望在社区网站上使用的大多数应用程序的工作版本。它处理用户注册和管理、论坛、常见问题解答、群组(包括丰富的权限方案)、新闻更新、文件存储和分发、个人主页、调查和基于 Web 的日历。正如您可能从现代系统中期望的那样,应用程序的管理几乎完全通过 Web 完成,只有少数配置文件。

经验丰富的开发人员可能可以在几周或几个月内编写其中一些或全部应用程序。但是为什么要重新发明轮子呢?此外,OpenACS 建立在构建此类社区所获得的集体经验之上,这反映在数据模型和应用程序的复杂性中。

从开发人员的角度来看,OpenACS 提供了一个专为创建新的集成应用程序而设计的数据库。此数据模型实际上是 OpenACS 最重要的部分。尽管您可以为另一个数据库(如 PostgreSQL 已完成的那样)重写软件,甚至可以使用默认 Tcl 以外的语言,但数据模型是系统智能的大部分所在。OpenACS 提供了 Tcl 和 Pl/PgSQL 过程,使您可以轻松地使用数据模型。

由于 OpenACS 非常依赖关系数据库,因此数据库访问必须高效且灵活非常重要。因此,OpenACS 安装几乎总是使用 AOLserver(在上个月的“At the Forge”专栏中介绍),而不是更流行的 Apache。由于 AOLserver 在单个服务器进程内部使用多个线程,因此它可以提供共享的数据库连接池。(尽管 OpenACS 社区内对 AOLserver 有相当强的忠诚度,但如果多线程 Apache 2.0 的引入最终将该项目引向该方向,我不会感到惊讶。)虽然 AOLserver 提供了自己的数据库 API,但 OpenACS 提供了许多更高级别的过程,可以非常轻松地使用数据库。

如果您计划仅使用单个品牌的数据库,那么您可以直接在您的 Tcl 程序中使用这些过程来存储和检索信息。但是为了确保所有应用程序都可以在所有平台上运行,OpenACS 鼓励开发人员将他们所有的数据库查询都放在专门格式化的 XML 文件中(带有 .xql 扩展名),每个文件对应一个数据库。当 Tcl 程序调用过程以将查询发送到数据库时,OpenACS“查询调度程序”会打开当前配置的数据库的 XML 文件,读取查询并将其发送到数据库。以这种方式编写的 OpenACS 系统应该能够仅通过更改顶级配置文件来从 PostgreSQL 切换到 Oracle,

正如我们上个月看到的那样,AOLserver 配备了自己的模板系统,称为 ADP,它可以轻松地将服务器端程序与单个页面上的静态 HTML 混合在一起。当然,这意味着设计师和程序员经常争夺对单个文件的控制权,因此设计师必须知道要避免页面的哪些部分。因此,OpenACS 包含一个新的、更高级的模板系统,该系统将每个页面分成两个部分:一个设置变量的 Tcl 页面和一个检索这些变量值的 ADP 页面。这种方法在某些方面类似于 Zope Page Templates (ZPT) 和 Enhydra 的 XMLC。

设计

OpenACS 听起来可能非常复杂,但它实际上仅由四个部分组成:1) 已安装的 PostgreSQL 或 Oracle 服务器;2) AOLserver,使用 nsxml(AOLserver 的 XML 解析模块)、PostgreSQL 和/或 Oracle 驱动程序以及适当的配置文件编译;3) OpenACS 数据模型;以及 4) OpenACS Tcl 库、Tcl 页面和 ADP 页面。

在 4.x 版本之前,安装 OpenACS 非常简单。您安装 PostgreSQL 和 AOLserver,使用 psql 命令行客户端加载 OpenACS 数据模型,将 OpenACS 库、Tcl 页面和 ADP 页面复制到相应的目录中,然后开始使用该系统。

但是这种方法导致了许多问题,其中大多数问题源于安装的缺乏灵活性。如果我想要两个不同 URL 下的论坛,而不是默认的 /bboard 怎么办?如果我只想安装两到三个软件包,而不是全部 40 个软件包怎么办?如果我想升级电子商务解决方案,而不同时升级 FAQ 系统怎么办?

这个问题的解决方案是 ArsDigita 软件包管理器,它在 ArsDigita 的 ACS 4.x 中引入,并被 OpenACS 4.x 采用。每个应用程序都已重命名为“软件包”,并且包含数据模型、.xql 文件、Tcl 库、Tcl 页面和 ADP 页面以及文档。每个软件包都可以安装在系统上的任意数量的 URL 上,并且可以具有与之关联的任意权限(使用 OpenACS 的核心用户和群组系统)。每个软件包还可以定义一个或多个参数,每次实例化时提供自定义信息。

如果您在 /web/openacs4 中安装 OpenACS,则 www 目录包含所有顶级 Tcl 和 ADP 页面,tcl 目录包含顶级 Tcl 库,packages 目录包含加载到系统上的每个软件包。

一旦软件包在文件系统中,您可以使用基于 Web 的 OpenACS 安装程序程序在数据库中创建特定于软件包的数据模型。最后,站点管理员通过管理站点地图挂载软件包(一次或多次)来使软件包可用。挂载后,应用程序可以通过命名的 URL 访问。

安装 OpenACS

现在我已经解释了 OpenACS 背后的许多理论,我们准备安装它了。请注意,安装相对复杂,因为它涉及许多必须以特定所有权和权限安装的软件包。OpenACS 4.5 安装过程比以前的版本更流畅、更轻松,但仍然很容易在此过程中犯错。

在开始之前,请确保已安装 PostgreSQL 7.1.3,包括服务器、客户端和开发库。最新版本的 PostgreSQL (7.2) 与旧版本有一些细微的不兼容性,这可能会使安装 OpenACS 变得困难。虽然 7.2 中肯定有很多改进,但您应该可以很好地使用 7.1.3。

此外,请确保您已安装 libxml 2.x;在 Red Hat 系统上,您应该确保 libxml2 和 libxml2-devel RPM 都已安装。如果没有这些,OpenACS 将无法打开与每个文件关联的 .info 软件包,以及查询调度程序使用的 .xql 文件。

接下来,安装 AOLserver,确保 /usr/local/aolserver 归 nsadmin 用户所有

# mkdir /usr/local/aolserver
# useradd nsadmin
# chown -R nsadmin /usr/local/aolserver

您应该下载称为“Matt's AOLserver distribution”(请参阅“资源”)的一体式版本,而不是安装库存版本的 AOLserver、应用 ArsDigita 和 OpenACS 工作人员多年来编写的补丁以及单独下载 PostgreSQL 和 XML 解析模块。

接下来,创建一个名为 openacs4 的 PostgreSQL 用户,并为其授予完全权限。(PostgreSQL 有自己的用户列表,该列表独立于 UNIX 列表。)通常,此类活动必须以 postgres 用户而不是 root 用户身份执行

# su postgres
# createuser openacs4
  Shall the new user be allowed to create
    databases? (y/n) y
  Shall the new user be allowed to create
    more new users? (y/n) y
  CREATE USER

现在,使用这个新的 PostgreSQL 用户创建一个新的数据库,我们将其称为 openacs4

# createdb -U openacs4 openacs4
  CREATE DATABASE
在此之后,以 root 用户身份登录时安装 OpenACS 软件包本身。您可以从 openacs.org 下载最新版本 (openacs-4-5-release.tgz)。传统上,此软件包在 /web 层次结构下解压缩
# mkdir /web
# cd /web
# tar -zxvf /tmp/openacs-4-5-release.tgz
# mv /web/openacs-4 /web/openacs4
# chown -R nsadmin.nsadmin /web
完成此步骤后,所有主要部分都已到位。剩下的就是将所有这些部分连接到 AOLserver 配置文件中。最简单的起点是从 openacs.org 下载文件 openacs4.tcl.txt,将其重命名为 openacs4.tcl,将其放置在 /usr/local/aolserver 中,并按以下方式编辑它
  • 修改 httpport 以反映您希望服务器运行的端口。默认情况下,HTTP 服务器在端口 80 上运行;在示例配置中,它设置为 8000。

  • 将主机名和地址设置(第 14 行和第 15 行)修改为您希望运行系统的计算机的实际主机名和 IP 地址。从理论上讲,openacs4.tcl 中的 Tcl 代码将自动查找您的主机名和 IP 地址。但是,如果您的计算机有多个名称或 IP 地址,或者如果您想使用 localhost 作为主机名进行测试,则您必须手动设置此项。

  • 将第 17 行更改为您希望使用的服务器和数据库的名称,该名称应该是安装 OpenACS 软件的 /web 中的目录名称。因此,如果您将 OpenACS 软件放在 /web/foo 下,您还应该将数据库命名为 foo。第 17 行上的 server 变量也应设置为 foo。

  • 将第 18 行更改为反映您希望创建的在线社区的人类可读名称。

  • 在您看到 ns_param user nsadmin 的每一行上,将值 (nsadmin) 更改为 openacs4,即创建数据库的 PostgreSQL 用户的名称。您必须为 AOLserver 打开到 PostgreSQL 的所有三个数据库连接池执行此操作,这些连接池称为 main、log 和 subquery。

完成这些更改后,您应该可以启动系统了。以 root 用户身份,在前台模式下启动服务器

# cd /usr/local/aolserver
# ./bin/nsd -f -u nsadmin -g nsadmin \
  -t openacs4.tcl

您应该在屏幕上看到很多调试信息,滚动速度比您可能阅读的速度快。当滚动停止时,您应该在末尾附近看到类似这样的内容

[22/Jul/2002:15:13:41][23316.1024][-main-]
  Notice: nssock: listening on 127.0.0.1:8000
[22/Jul/2002:15:13:41][23316.8201][-nssock-]
  Notice: nssock: starting
[22/Jul/2002:15:13:41][23316.8201][-nssock-]
  Notice: nssock: accepting connections
如果看到,请将您的 Web 浏览器指向 https://:8000/。如果一切顺利,您应该会看到来自 OpenACS 安装程序的欢迎消息。现在,按照说明创建系统,单击底部出现的“下一步”按钮。请注意,安装过程可能需要一段时间,因为安装程序会创建大量数据库表。在安装过程快结束时,系统将要求您提供 OpenACS 管理员的电子邮件地址以及其他系统参数。

最后一个页面欢迎您使用 OpenACS,并通知您 AOLserver 已终止。(这是必要的,以便将所有新安装的 Tcl 库文件加载到 AOLserver 的内存中。)重新启动服务器,再次将浏览器指向 https://:8000/,OpenACS 将准备就绪等待您。

此时,OpenACS 功能齐全,但鉴于尚未安装任何软件包,它不会为您做太多事情。在下个月的“At the Forge”专栏中,我们将了解如何安装和管理 OpenACS 软件包。

OpenACS 值得您花费时间吗?

不可否认:OpenACS 是一头复杂的野兽。虽然该软件总体上很出色,但它需要经验丰富的 UNIX/Web/数据库黑客才能使用和修改它。即使安装过程也很漫长而复杂,我可以根据个人经验向您保证,通常很难理解您在哪里犯了错误。文档正在改进,但仍有许多明显的漏洞和难以理解的表结构,可能会让人感到困惑。

似乎还不够,代码在许多地方都没有完全完成。是的,OpenACS 是开源的这一事实确实意味着您可以自己修复问题。并且社区通常非常开放和慷慨,为那些试图开始使用它的人提供帮助。但是,不断听到您需要的软件包即将准备就绪,或者有人希望在未来的某个时候完成它们,这令人沮丧。我不反对帮助改进开源项目,特别是当它直接使我(和我的客户)受益时,但是许多小的烦恼会很快累积起来。

考虑到这些抱怨,认为我完全赞同 OpenACS 似乎很荒谬。的确,可能需要一段时间才能尘埃落定,并且进行所有必要的改进。但是,不可否认的是,OpenACS 为创建在线社区提供了比我见过的任何其他系统都丰富得多的基础设施。包含的应用程序可能无法完全工作,但它们总体上运行得非常好,并且提供了我的客户开箱即用的大部分功能。最后,许多商业咨询公司、几所大学和一打或两打独立顾问正在致力于 OpenACS 的改进和扩展,这些改进和扩展有望使其比今天更强大、功能更齐全。

如果您正在创建一个在线社区,并且不害怕使用 Tcl 和 SQL 代码,那么您应该认真考虑一下 OpenACS。本月,我们考虑了 OpenACS 的整体结构,并了解了如何安装其各种元素。下个月,我们将了解如何安装和管理 OpenACS 附带的各种软件包,以便我们可以组建一个自定义社区站点,其中仅包含我们真正需要的程序。

资源

电子邮件:reuven@lerner.co.il

Reuven M. Lerner 是一位专门从事 Web/数据库应用程序和开源软件的顾问。他的著作《Core Perl》于 2002 年 1 月由 Prentice Hall 出版。Reuven 与他的妻子和女儿住在以色列的莫迪因。

加载 Disqus 评论