体验gollum

gollum是一个轻量级的wiki系统,使用git作为版本管理和跟踪工具,支持markdown,mediawiki,texttile等多种语法,由github开发并且已经投入到githubwiki的应用中。

安装

gollum与指环王中某个屌丝同名,不知道开发人员的命名灵感是不是来自那里,我们知道,程序员老是喜欢用一些稀奇古怪的东西来给自己的软件命名,像python(莽蛇),octopress(章鱼)等等,搞得好像人人都是动物保护主义者一样~

根据github主页的说明,gollum的安装非常简单,一条命令解决

安装gollum
1
$ [sudo] gem install gollum

假如你喜欢追新,觉得这样安装的版本太老,想直接上HEAD的话,clone一个镜像使用bundle install安装好依赖之后,其bin文件夹下面的gollum就直接可以执行了,绝对绿色环保无污染。

现在就来体验一下gollum带来的不同与其他wiki的小清新感觉吧,在主目录下使用以下命令

执行gollum
1
2
3
4
$ mkdir gowiki
$ cd gowiki
$ git init
$ gollum

"gollum-exec-info" 看到右图就说明gollum已经正确的运行了,gollum默认监听4567端口,并且提供了一个可交互的前端,这个时候用户可以通过浏览器打开http://localhost:4567来看一下gollum了

"gollum-frontend"

界面实在是足够简洁,提供的几个button实现了wiki的基本功能增删改查,还能查看历史页面,而且还有一套开放的用户系统,name和email由git的使用者决定,头像则由gravatar生成。

除了通过页面编辑wiki以外,gollum还支持直接由git提交版本来更新页面。由于我们gollum默认读取master分支,而我们正checkout在master上,不方便其他人的编辑,所以我们暂时新建一个demo分支来避免冲突。

用git来写wiki
1
2
3
4
5
$ git branch demo
$ git checkout demo
$ mkdir ../gowiki2 && cd ../gowiki2
$ git init && git remote add origin ../gowiki
$ git pull

现在gowiki2中应该有了之前编辑过的几个页面,修改以后push到origin的master,就可以在wiki中看到刚刚的更新了。

部署

虽然gollum提供了一个命令行工具监听端口来提供web服务,但是没有daemon选项,也没有容错机制,何况想来也没有多少人会使用4567端口来访问webserver。那有没有办法将gollum托管给我们的web服务器呢,答案是肯定的,下面以apache为例。

gollum由ruby写成,所以首先需要安装passenger(mod_rails)模块,这个模块的安装在官网上有详细的介绍,与其他apache模块的安装大同小异,下面主要介绍一下vhost的配置。

首先进入gollum的安装路径,不知道的可以用下面的命令找一下

查找gollum路径
1
2
$ gem which gollum
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/gollum-2.0.0/lib/gollum.rb

gollum的前端app在gollum/frontend/public/下(将这个uri跟在上面找出来的路径下就行了),下面将用frontpath=/usr/local/ruby/lib/ruby/gems/1.9.1/gems/gollum-2.0.0/lib/gollum/frontend/来替代,然后配置vhost

apache的virtual-hosts配置
1
2
3
4
<VirtualHost *>
    ServerName www.gollum.local.com  #替换成自己的域名
    DocumentRoot ${frontpath}public/ #替换成本地路径
</VirtualHost>

然后在${frontpath}(同上,真实路径)下新建一个文件config.ru,写入下面的内容

config.ru
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/local/bin/env ruby
require 'rubygems'
require 'gollum/frontend/app'
system("which git") or raise "Looks like I can't find the git CLI in your path.\nYour path is: #{ENV['PATH']}"
gollum_path = '/home/{user}/gowiki' #这里的路径替换成实际想存放wiki文档的git目录
disable :run
configure :development, :staging, :production do
 set :raise_errors, true
 set :show_exceptions, true
 set :dump_errors, true
 set :clean_trace, true
end
$path = gollum_path
Precious::App.set(:gollum_path, gollum_path)
Precious::App.set(:wiki_options, {})
run Precious::App

为了使/home/{user}/gowiki目录具有写权限,可以将这个目录的权限这是设为777或者让passenger进程的用户组设为user,修改httpd.conf增加一行PassengerDefaultUser user,这样我们通过web端更新wiki的时候就不会报权限问题了。

现在重启apache,然后访问www.gollum.local.com,结果就与上面看到的页面一模一样啦~~。

已发现的bug

gollum绑定的grit库中存在一个关于编码的错误[issue],当提交的文本中包含unicode字符时会导致一个fetal error。在grit2.5.0中修复了这个错误,所以在bundle之前需要先将grit版本设置为2.5.0。gollum最近的两个版本中需要修改的地方还不太一样,晕了~。输入gollum --version看一下版本,假如是2.0.0(gem安装的版本),则修改gollum.gemspec,若是2.1.0(目前的HEAD版本),则修改Gemfile.lock。将其中的grit版本改为2.5.0即可。

参考资料

Comments