2014年3月13日木曜日

phdocとherokuでシンプルなwiki作成

phdocを触った

某団体のためにwikiっぽいものを作ってみようかと思ったんだけどpukiwikiみたいなちゃんとしたwikiは面倒だった…。機能は多くていいかもしれないけど大して複雑なことする気もないし、管理が面倒くさいなと。
でもテキストファイルだけは寂しいし、htmlごりごり書くのも面倒。マークダウンで作れないかなと思ったらphdocなるものがあったので使ってみた。
pythonで書かれたマークダウン→html&css&js変換ツールみたいなイメージ?

インストール

    $ pip install phdoc

wiki初期化

phdoc init wiki名 で初期化される。
$ phdoc init ponpoko-wiki
phdoc.init: INFO: Wiki initialization complete
phdoc.init: INFO: Your new wiki is at: /Users/licorice/Desktop/ponpoko-wiki
ディレクトリ構成。wikiディレクトリ以下にマークダウンのファイルを置く感じか。デフォルトで幾つかのファイルが生成されている。
$ cd ponpoko-wiki
$ tree
.
├── phdoc.yaml
├── static
└── wiki
    ├── index.md
    ├── notes
    │   └── pnp.md
    └── publications.md

wikiビルド

デフォルトの状態でビルドしてみる。ビルドするとマークダウンをhtmlとcss,jsに変換して吐き出してくれる。
wwwディレクトリが新たに作成されそこに吐き出されている。
$ phdoc build
$ tree
.
├── phdoc.yaml
├── static
├── wiki
│   ├── index.md
│   ├── notes
│   │   └── pnp.md
│   └── publications.md
└── www
    ├── _list.html
    ├── index.html
    ├── media
    │   ├── _list.html
    │   ├── css
    │   │   ├── _list.html
    │   │   ├── basic.css
    │   │   ├── elements.css
    │   │   ├── index.html
    │   │   └── pygments.css
    │   ├── index.html
    │   └── js
    │       ├── _list.html
    │       ├── addcss.js
    │       ├── fold.js
    │       ├── hyphenator.js
    │       └── index.html
    ├── notes
    │   ├── _list.html
    │   ├── index.html
    │   └── pnp.html
    └── publications.html

wiki確認

その場でサーバを立ち上げて作成したhtmlを閲覧できる。http://127.0.0.1:8008へアクセスすると怪しげな博士の紹介ページ的なデフォルトのwikiページが見れる。
$ phdoc serve
phdoc.serve: INFO: Serving on http://127.0.0.1:8008
phdoc.wsgi: INFO: GET / - 200
phdoc.wsgi: INFO: GET /media/css/basic.css - 200
phdoc.wsgi: INFO: GET /media/css/elements.css - 200
phdoc.wsgi: INFO: GET /media/js/hyphenator.js - 200
phdoc.wsgi: INFO: GET /media/js/addcss.js - 200
phdoc.wsgi: INFO: GET /media/css/pygments.css - 200
phdoc.wsgi: INFO: GET /media/js/fold.js - 200
...

wiki設定

phdoc.yaml内でwikiの設定をする
 $ cat phdoc.yaml

wiki-name: PHDoc wiki
html-dir: www
remote: example.com:public_html
nav:
    pages:
        - index
        - publications
        - notes
    labels:
        index: About
        publications: Publications
        notes: Notes
markdown:
    extensions: [toc, codehilite, def_list]
    safe-mode: false
    output-format: html
wiki-nameでtitleの設定ができる。html-dirはpublic等に設定するとビルド時その名前のディレクトリに吐かれるようになる。
remoteはまだ使ったことがないがrsyncでリモートサーバへ設置してくれるものらしい。便利!
nav内にhtmlファイル一個相当のページ名を書いていく。新しくページを作成したいときはwikiディレクトリ内にマークダウンファイルを追加するのと、ここにそのファイルの名前を書くことになる。
labelsはwikiのナビゲーションタブで実際に表示されるページの名前になる。
markdown内ではエクステンションの設定等ができる。マークダウンファイルの先頭に[TOC]と入れると目次を作ってくれる。[toc]では認識されないので注意!
safe-modeやoutput-formatはまだ使ったことがない。

heroku

herokuにwikiページを設置してみる。

準備

sinatraで動かしてみる。
Gemfile準備。
$cat Gemfile
source :gemcutter
gem 'sinatra'
bundle。Gemfile.lock生成。
$ bundle
$ cat Gemfile.lock
GEM
  remote: http://rubygems.org/
  specs:
    rack (1.5.2)
    rack-protection (1.5.2)
      rack
    sinatra (1.4.4)
      rack (~> 1.4)
      rack-protection (~> 1.4)
      tilt (~> 1.3, >= 1.3.4)
    tilt (1.4.1)

PLATFORMS
  ruby

DEPENDENCIES
  sinatra
rack設定。
$ cat config.ru
require 'rubygems'
require 'sinatra'

get '/' do
  open('www/index.html').read
end

run Sinatra::Application

デプロイ

heroku登録、herokuコマンドラインツール、gitを予め入れておく。
ローカルにコミット。
$ git init .
$ git add .
$ git commit -m "1st commit"
herokuアプリ(リポジトリ)作成。
$ heroku create ponpoko-wiki
Creating ponpoko-wiki... done, stack is cedar
http://ponpoko-wiki.herokuapp.com/ | git@heroku.com:ponpoko-wiki.git
herokuにプッシュ。
$ git push heroku master
これで公開されました。めでたしめでたs…
ん??なんかcssが読み込まれてない…。表示崩れてる…。
なぜかよくわかりませんが、wwwディレクトリではなくpublicディレクトリじゃないとうまくいかないようです。

修正

phdoc.yaml修正。
-html-dir: www
+html-dir: public
config.ru修正。
-  open('www/index.html').read
+  open('public/index.html').read
ビルドしてコミット、プッシュ。
$ phdoc build
$ g add .
$ g commit -m "ディレクトリ名修正"
$ git push heroku master
$ heroku open
おおーうまく表示されたようです。 やったぜ。

phdocには他にもクールな機能があるとのことなので面白そうな機能あったら試してみます。
ノシ

----

見づれえ…
mdをhtmlに変換して貼り付けるだけじゃダメか...