Review Board 的使用理念主要基于“Review Request”。开发人员提交一个补丁,同时生成一个 Review Request ;其他人针对这个补丁提供 Review 意见(可以对特定代码行发表 Review 意见,并且可以对 Review 意见进行回复讨论)。也可以利用 Review Board 提供的 RBTools 包中的 post-review 指令从代码库中指定几个版本自动生成一个 Review Request 。
总体来说,利用 Review Board 组织基于互联网的远距离协同开发还是不错的,可以有一个方便的界面对代码开展讨论。只是要有效利用 Review 这种办法,需要开发组形成一套包括 Review 在内的协作工作流程。
1. 基本资源
类似解决方案:
- rietveld:这个是 Python 语言发明人 Guido 老兄搞出来的 Review 管理工具,基于 Django 和 GAE 。Review Board 基本上是参考这玩意儿搞出来的重新实现,两者在基本概念上应该是一致的。
2. 安装部署
部署过程参考Administration Guide。
2.1 在 lighttpd 中增加 Review Board 的配置文件
rb-site install 指令会自动生成 lighttpd 的配置文件,也即 conf 目录下的 lighttpd.conf 文件。可以在全局 lighttpd 文件中使用 include 命令引用这个配置文件,比如在 /etc/lighttpd/lighttpd.conf 中增加:
但 include 命令似乎不支持指定路径。所以我建立了一个符号链接,把 Review Board 的 lighttpd.conf 映射成 /etc/lighttpd/lighttpd_reviewboard.conf 文件。
2.2 解决 lighttpd 下的 404 错误问题
直接用 Review Board 自动生成的 lighttpd.conf 有可能在访问页面时总是遇到 404 错误。如果编辑 conf/settings_local.py 文件,把 Debug 打开(修改 DEBUG = True),再遇到 404 错误时,浏览器可能会给出类似下面这样的提示:
patterns, in this order:
1. ^ ^admin/
2. ^ ^media/(?P<path>.*)$
3. ^ ^account/
4. ^ ^api/(?P<api_format>json|xml)/
5. ^ ^r/
6. ^ ^reports/
7. ^ ^dashboard/$
8. ^ ^users/$
9. ^ ^users/(?P<username>[A-Za-z0-9@_\-\.]+)/$
10. ^ ^groups/$
11. ^ ^groups/(?P<name>[A-Za-z0-9_-]+)/$
12. ^ ^groups/(?P<name>[A-Za-z0-9_-]+)/members/$
13. ^ ^feeds/rss/(?P<url>.*)/$
14. ^ ^feeds/atom/(?P<url>.*)/$
15. ^ ^account/logout/$
16. ^ ^$
17. ^ ^iphone/
The current URL, reviewboard.fcgi/dashboard/, didn't match any of these.
这似乎是 Lighttpd 的 FastCGI 界面的一个 Bug 。应该和 Bug Incorrect PATH_INFO when FastCGI is serving "/" 有些关系。以前在用 Trac 的时候可以参考 Relative paths broken when project at root URI under lighttpd with fastcgi 绕过。但 Review Board 基于 Django ,我还真不知道怎么弄。
最后只好把 Lighttpd 升级到 1.4.23 以上的版本,并且给 lighttpd.conf 打了如下补丁,终于正常工作了。
< "/reviewboard.fcgi" => (
---
> "/" => (
23a24,26
>
> # needed if trac_prefix is empty; and you need >= 1.4.23
> "fix-root-scriptname" => "enable",
36c39
< "^(/.*)$" => "/reviewboard.fcgi$1",
---
> "^(/.*)$" => "$1",