home(h) links(l) memo(m) profile(r)
memo(m) cgi(g) wiliki

wiliki関係

Index

WiLiKiはLisp系言語の一つGaucheで書かれたWikiクローンの一つ。

WiLiKiのインストール

インストールにはGauche 0.8.3 以降が動作する環境が必要。デフォルトのバックエンドデータベースライブラリは gdbm であり、WiLiKiのインストール時 gdbm の利用環境も合わせてインストールされる。qdbm を使う場合は qdbm そのものに加え、Gauche で qdbm が使えるようにするためのモジュール Gauche-qdbm のインストールも必要。

Gaucheのインストール

WiLiKiの動作には、Gauche(ゴーシュ)というScheme系インタプリタ処理系環境が必要。必要バージョンは0.8.3以降。Gaucheのインストールについてはこちら参照。

qdbmのインストール

WiLiKiは、既定ではバックエンドデータベースとしてgdbmを使用する設定になっている。qdbmを利用するなら、qdbmそのものとGaucheからqdbmを扱うのに必要なGauche-qdbmのインストールが必要。qdbmのインストールについてはこちら参照。Gauche-qdbmのインストールについては以下の通り。

WiLiKiのインストール

1. ソースのダウンロード

SourceForge.netよりソースをダウンロード。2010/1/22 現在、最新バージョンは0.61。

shell> wget http://downloads.sourceforge.net/project/wiliki/wiliki/0.6.1/WiLiKi-0.6.1.tgz
      

2. インストール(通常)

ダウンロードしたディレクトリで、gauche-packageを実行すればよい(必要に応じ"sudo "を前につけて)。

shell> gauche-package install WiLiKi-0.6.1.tgz
      

以下の一般的手順でもOK(必要に応じ"sudo "を前につけて)だが、通常は前者の方が一度に済むので便利。

shell> tar -zxvf WiLiKi-0.6.1.tgz
shell> cd WiLiKi-0.6.1
shell> ./configure
shell> make
shell> make check
shell> make install
      

3. 設定

ソースバイナリを展開した中にcgiのサンプルが入っている。これを適宜修正して利用。

shell> tar -zxvf WiLiKi-0.6.1.tgz ←未展開なら展開する
shell> cp WiLiKi-0.6.1/src/wiliki.cgi /var/www/cgi-bin/ ←CGIスクリプトディレクトリへスクリプトをコピー
shell> cp WiLiKi-0.6.1/src/wiliki.css /var/www/html/ ←スタイルシートをコピー
shell> cd /var/www/cgi-bin/
shell> vi wiliki.cgi
      
 1: #!/usr/bin/gosh →goshの場所。which gosh コマンドで確認できる
 2: (use wiliki) →wilikiに関するgaucheモジュールを読み込む
 3: (define (main args)
 4:   (wiliki-main
 5:    (make <wiliki>
 6:      :db-path "/home/kudou/data/wikidata.dbm" 
 7:      :log-file "/home/kudou/data/wikidata.log" 
 8:      :top-page "WiLiKi" 
 9:      :title "MyWiliki" 
10:      :description "Kudou's Wiliki Site"
11:      :style-sheet "/wiliki.css"
12:      :language 'jp
13:      :charsets '((jp . euc-jp) (en . euc-jp))
14:      :image-urls '((#/^http:\/\/sourceforge.net\/sflogo/ allow))
15:      :editable? #t
16:      :debug-level 0
17:      :db-type <gdbm>
18:      )))
      
6行目:データベースファイルの指定
dbmデータベースファイルのパスとファイル名を指定します。相対パスで記述すると、それはCGIスクリプト(wiliki.cgi)があるディレクトリからの相対指定となります。指定場所はhttpで外部からアクセスできるディレクトリの外に置くことを推奨します。データベースファイルは存在しなくても初回アクセスの際、自動的に作成されます。そのためデータベースファイルを置くディレクトリは初回のみCGIスクリプトが書き込みできるようアクセス権を設定して下さい。
7行目:履歴記録の設定
編集履歴を記録する場合、ここにログファイルのパスとファイル名を指定します。相対パスで記述すると、db-path で指定したデータベースファイルのパスからの相対指定とみなされます。このキーワードを指定しないと編集履歴は記録されなくなります。
8行目:トップページ名
トップページの名前です。指定したWikiページが存在しなかった場合、初回アクセス時に作成されます。
9行目:サイト名
WiLiKiサイトの名前です。ここで指定した文字列は検索結果ページ、最近の更新ページなどいくつかのページで用いられます。
11行目:スタイルシートファイル名
WiLiKiサイトの各ページに適用するスタイル情報を記したファイルのパスとファイル名を指定します。ここで記すパスはサーバのローカルパスではなく、外部から見た時のパスです。相対パスだとCGIスクリプトのあるディレクトリからの相対パス、絶対パスだとWebサイトのドキュメントルートからの絶対パスとみなされます。

トラブルシューティング

etc

CGI引数について

wilikiのcgiに渡す引数(wiliki.cgi?この部分)について。

ページの種類 指定引数 例(PDB:1A1R)
URL引数全体 キー:値 URL引数全体 キー:値
通常表示ページ ?ページ名 (p):ページ名 ?PDB%3a1A1R (p):PDB%3a1A1R
編集ページ ?p=ページ名&c=e p:ページ名
c:e
?p=PDB%3a1W26&c=e p:PDB%3a1A1R
c:e
編集履歴ページ ?p=ページ名&c=h p:ページ名
c:h
?p=PDB%3a1W26&c=h p:PDB%3a1A1R
c:h
編集プレビューページ (POST) p:ページ名
c:c
l:jp/en(言語名)
mtime:(更新日時(UNIX時間))
content:ページ内容
logmsg:コメント
(POST) p:PDB%3a1A1R
c:c
l:jp
mtime:1171949834
content:* タンパク質名...
logmsg:誤記修正

コミット

WiLiKiページを更新するにはcmd-commit-editコマンドを使う。 これを使うにはあらかじめwiliki/edit.scmのロード((use wiliki.edit)の実行)を行っておく必要がある。

【書式】
(use wiliki.edit)
(cmd-commit-edit ページ名 ページ内容 更新時間 コメント 最新更新に載せるか )
    
ページ名
WiLiKiのページ名
ページ内容
ページ名で指定したページの新しい内容
更新時間
ページ更新時間。現在時刻を返す(sys-time)を指定しておくのが一般的と思われる。
コメント
更新内容の要約などを記述。
最新更新に載せるか
#tを指定すれば最新の更新ページに記載、#fなら記載しない。
#tを指定すれば手続き的に生成されたことを示す、とedit.scmには記載されている。スクリプトなどで生成された編集の場合#tにするのがいいのかな? ただ、editableがlimitedになっている時のみ有効とも書かれてあり、よく分からない。

※これだけでは、"WiLiKi database is not opened" というエラーになるよう。普通にdbm-openでもだめみたいなので、WiLiKiの手続きを使う必要がありそう?

【例】ページ名「ほげ」、内容「ほげほげほげ」、コメント「ほげ3つ」
(use wiliki.edit)
(cmd-commit-edit "ほげ"
                 "ほげほげほげ"
                 (sys-time)
                 "ほげ3つ"
                 #t
                 #t)
    

編集ページの「Commit without preview」ボタンに関わるform要素情報。

<form method="post" action="(自分自身のスクリプト)">
  <input type="hidden" name="c" value="c" /> ←処理内容
  <input type="hidden" name="p" value="ページ名" />
  <input type="hidden" name="l" value="言語名" /> ←言語名、"jp" または "en"
  <input type="hidden" name="mtime" value="編集時刻" /> ←UNIXタイム表記(1970年元旦からの積算秒数)
  <input type="checkbox" name="donttoutch" value="on" /> ←チェックOFFだと送信されない
  <input type="submit" name="commit" value="Commit without preview" />
  <textarea name="content">
(ページ内容)
  </textarea>
  <textarea name="logmsg">
(コメント内容)
  </textarea>
</form>
    

既定のマクロ

自動的に指定の情報と内容を置き換えて出力を行うもの。内容の書き込み(コミット)時にのみ置換されるWriterマクロと、表示時に毎回内容を置換するReaderマクロがある。

マクロ種別 マクロ書式 内容
Writer [[$date]] 書き込み時、サーバローカル時刻に置換されて書き込まれる。
Reader [[$$include ページ名]] 指定したページ名の内容に置換して表示される。指定したページが存在しない場合はマクロ展開は行われない。
[[$$index ページ名]] ページ名が指定したページ名で始まるページの一覧が箇条書きで出力される。完全一致するものも含まれる。

例:[[$$index VirusGroup]] → 「VirusGroup」および「VirusGroup:」で始まるページ名を持つページ一覧出力(実際はリンク付き)

  • VirusGroup
  • VirusGroup:I(dsDNA)
  • VirusGroup:II(ssDNA)
  • VirusGroup:III(dsRNA)
  • VirusGroup:IV(+ssRNA)
  • VirusGroup:V(-ssRNA)
  • VirusGroup:VI(+ssRNA-RT)
  • VirusGroup:VII(dsDNA-RT)
[[$$cindex ページ名 区切り文字]] [[$$index]]のコンパクト版(Compact index)。指定した区切り文字で区切って出力される。区切り文字を省略した場合は空白が用いられる。
[[$$toc ページ名]] ページ名で指定したページの見出しをリストにして出力する。ページ名を省略した場合はこのマクロを記したページ自身の見出し一覧が出力される。
[[$$img URL 代替文字列]] URLがwilikiメインスクリプトの「image-urls」で許可しているサイトである場合は、指定した画像を表示する。代替文字列(alt属性の属性値)には、代替文字列を指定している場合はその文字列が、省略した場合は「image」が用いられる。 URLが「image-urls」で許可しているサイト以外の場合は、代替文字列(指定がない場合は「image」)をアンカー文字列とするURLへのハイパーリンクとなる。

参考文献・サイト

WiLiKiパラメータの参照

【wilikiスクリプト】
#!/usr/local/bin/gosh
(use wiliki)
(define (main args)
  (wiliki-main
    (make <wiliki>
      :db-path "/var/www/html/wikidata.dbm"
      :top-page "Toppage"
...
)))
【変数定義】
(define top
 (ref (wiliki) 'top-page))
→par には Toppage が代入される
    

かつてはクラス変数の参照?に「(top-page-op (wiliki))」という書式が許されていたが、現在は使えない(Gauche バージョン0.9ではこの書式は動作しない(改めて定義すれば使えるのかもしれないが、少なくとも既定状態では使えない)。0.8.13では動作するよう)。参照:wiliki.scmのソース解読

WiLiKiの解析

ファイル構成