試してみる
ええと、どうするか。
- アプリケーションのスケルトンを生成
- 中身を変更
- インストール
- ./DIST gen
- ./configure
- make
- make install
- 動作確認
とりあえず適当に進めてみます。
スケルトン生成
ええと、Step1 によれば kahua-package コマンドを使う、とあるな。
$ kahua-package create xxxx
名前がとても微妙。
追記1 (12/18)
上記、間違いです。スケルトン作るのは
$ kahua-package generate xxxx
です。create だとサイトバンドル、が生成されます。
中身変更
以下なカンジ。とりあえず uname で。
(use gauche.process) (load "xxxx/version.kahua") (define page-template (kahua:make-xml-template (kahua-template-path "xxxx/page.xml"))) (define-entry (version) (kahua:xml-template->sxml page-template :title (title/ (@/ (id "title")) "xxxx") :body (div/ (@/ (id "body")) (h1/ (format "xxxx: version ~a" *xxxx-version*)) (a/cont/ (@@/ (cont greeting)) "greeting")))) (define-entry (greeting) (kahua:xml-template->sxml page-template :body (div/ (@/ (id "body")) (h1/ (car (process-output->string-list '(uname -smp)))) (a/cont/ (@@/ (cont version)) "version")))) (initialize-main-proc greeting)
コメントは除く。
インストール
以下。
$ ./DIST gen $ ./configure --prefix=/usr/local/kahua --with-site-bundle=$HOME/work/site checking for gosh... /usr/local/bin/gosh checking for kahua-install... /usr/local/kahua/bin/kahua-install checking for a BSD-compatible install... /usr/bin/install -c configure: creating ./config.status config.status: creating Makefile $ make sed -e "s@##PROJECT_VERSION##@0.0.0@" xxxx/version.kahua.in > xxxx/version.kahua sed -e "s@##GOSH##@/usr/local/bin/gosh@" -e "s@##PLUGINS##@xxxx.scm@" \ -e "s@##KAHUA_WORKING##@/usr/local/kahua/var/kahua@" \ -e "s@##KAHUA_LIB##@/usr/local/kahua/lib/kahua@" \ -e "s@##PROJECT_VERSION##@0.0.0@" \ test/test.scm.in > test/test.scm sed -e "s@##TEST_DIR##@/home/guest/work/xxxx@" test/test.conf.in > test/test.conf test -L checkout || ln -s . checkout $ make install (略 $
app-servers
work/site/ap-serversapp-servers にエントリ追加。
(;;Each entry follow this format: ;;(<type> :arguments (<arg> ...) :run-by-default <num> ;; :profile <path-to-profile-base> ;; :default-database-name <path-to-database>) (xxxx :arguments () :run-by-default 1) )
で、kahua-spvr を起動したらエラーが ...
gauche.process が cannot find との事。うーん。
を
plugins というディレクトリを発見。中にある xxxx.scm の中身が以下。
;; normal (allow-module srfi-1) (allow-module srfi-13) (allow-module srfi-19) (allow-module srfi-27) (allow-module util.list) (allow-module util.match) (allow-module file.util) (allow-module gauche.collection) (allow-module gauche.mop.singleton) (allow-module rfc.uri)
ここに記述を追加してみる。で、以下。
$ kahua-spvr -S ~/work/site -H localhost:8088 *** ERROR: cannot find plugin gauche.process Stack Trace: _______________________________________ 0 (report-error e) At line 128 of "/usr/local/kahua/lib/kahua/kahua-server.scm" 1 (load-kahua-module (car mods)) At line 212 of "/usr/local/kahua/lib/kahua/kahua-server.scm" $
これを見てはじめて make してない事に気づく。make install してリトライ。今度はオチない模様。で w3m でアクセスしてみたら以下なメセジが出力。
*** ERROR: unbound variable: process-output->string-list Stack Trace: _______________________________________ 0 (kahua-error-string e #t) (以下略
use しないと駄目なのかな。use の部分コメントアウトしてたんですが、有効にして再度 make install したら出力されました。
Linux i686 unknown version
なるほど。
使いたいモジュール(??)は plugins のナニに
(allow-module gauche.process)
追加してあげて、アプリ側でも use してあげる必要がある、と。
といいつつ
ちょっとヤッてみました。まず
を見つつ、試行錯誤しつつ以下をでっち上げた。
#!/usr/bin/gosh (use rfc.http) (define main (lambda (args) (let ((b (receive all-values (http-get "localhost:8088" "/") all-values))) (display b)) ))
最初、多値の扱い方が分からなくて (というか未だにあんま理解できてない)、ハマりかけ。
とか参考になりました。で、上記を実行して戻った結果が以下。
$ ./get.scm (200 ((date Wed, 17 Dec 2008 13:44:15 GMT) (server Kahua-HTTPd/1.0.7.3) (content-type text/html; charset=utf-8) (conne ction close) (set-cookie x-kahua-sgsid=kq6vzwyz2w79;Path=/;Discard)) <?xml version="1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='ja' lang='ja'><head><title id='title'>SAMPLE</title ></head ><body><div id='body'><h1>Linux i686 unknown</h1 ><a href='/xxxx/version'>version</a ></div ></body ></html >)$
いっちゃん最後の要素を sxml.saax モジュールを使って該当部分をナニ。
もすこし
caddr で xml なナニが取れました。
#!/usr/bin/gosh (use rfc.http) (define main (lambda (args) (let ((b (receive all-values (http-get "localhost:8088" "/") all-values))) (display (caddr b))) ))
スクリプト実行したナニが以下。
$ ./get.scm <?xml version="1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='ja' lang='ja'><head><title id='title'>SAMPLE</title ></head ><body><div id='body'><h1>Linux i686 unknown</h1 ><a href='/xxxx/version'>version</a ></div ></body ></html >$
sxml.saax モジュールのソレな手続きに吸わせたらどんなリストになるんだろ。
追記2 (12/18)
微妙に疑問なんですが、/ ではなくて /xxxx にアクセスしないと駄目なハズなんですが、何故に正常に取れているのか謎だらけ。別途調べてエントリ入れます。