Sqale で Gollum を動かす

クローズドベータの招待を頂いたので、Github 製の wiki エンジンを動かしてみた。
http://gollum-heavenshell.sqale.jp/


まずは Github から zip をダウンロードし適当に展開し、.gitignore を編集する。

coverage
pkg
.DS_Store
.bundle
vendor/*

bundle install を実行する。

$ bundle install --path=vendor/bundle

Gollum 自体は config.ru を同梱しておらず gollum コマンドで起動する。
Sqale は config.ru を探して起動するそうなので、config.ru を作った。


まずはローカルで rackup できるか試してみる。

$ bundle exec rackup
[2012-05-28 00:48:19] INFO  WEBrick 1.3.1
[2012-05-28 00:48:19] INFO  ruby 1.9.3 (2012-02-16) [x86_64-darwin10]
[2012-05-28 00:48:19] INFO  WEBrick::HTTPServer#start: pid=23343 port=9292

無事に起動できたが、ブラウザでアクセスすると Grit::InvalidGitRepositoryError が出た。
これは git のリポジトリが作成されていないのが原因。
なので、config.ru で起動時にリポジトリディレクトリが無かったら生成するようにした。

root_path = File.dirname(__FILE__)
data_path = File.join(root_path, 'data')
if !File.exists?(data_path)
  Dir::mkdir(data_path)
  repo = Grit::Repo.init(data_path)
end

つづいて Sqale にデプロイをする。

$ git add .
$ git commit -m "Hello gollum"
$ git push origin master

最初デプロイしても Unicorn がエラーを繰り返してた。
原因は vendor/ 以下に Ruby の拡張が含まれていて、それを一緒にデプロイしていたからのよう。

との事なので、vendor 以下のライブラリをデプロイする必要なないそう。


で、Ruby 力が低いので色々 [twitter:@gosukenator] さんに教えて頂きつつトライアンドエラーを繰り返しつつやってたら、Unicorn がエラーを出力せずに起動が出来た。


ブラウザでアクセスしてみると、css, JavaScript404 Not Found で読み込まれていない。


nginx が静的ファイルをサーブする場所がどこかなと /etc/nginx/nginx.conf を読んでみると、/home/sqale/current/public にエイリアスが指定されていた。

Sinatra の 静的ディレクトリの変更の仕方が分からなかったので、とりあえず/path/to/gollum/lib/gollum/frontend/public/gollum を /path/to/public にコピーをしてデプロイしたら無事に静的ファイルがサーブされるようになった。


というわけで無事に Gollum を起動できた訳だけど、幾つか問題がある。

  • ソースコードとかの色づけができない
  • タイトルにマルチバイトな文字を突っ込むと落ちる

ソースコードの色づけは pygments の Ruby 版を使っているようだけど、https://github.com/paperboy-sqale/sqale-support/issues/1 との事なのでそのうち対応して頂けるかと思う。
タイトルにマルチバイトは gollum の issue に結構登録されているけど、軒並み Known issue とかで close されているので、いつか対応されるんじゃないかな。


というわけで現状 Ruby しか対応してないけど、Sqale 自体は nginx + Unicorn で速いので良い選択肢になると思う。
Rubiest の人たちは国内で日本語のサポートが使えるというので選択肢が増えたかと思う。


そのうち WSGI も対応されるとの事なので、それが対応したら自分はもっと遊べると思う。
Unicorn の代わりに Gunicorn で、meinheld あたりをワーカーに出来たらもの凄く嬉しいw