試してみる

ええと、どうするか。

  • アプリケーションのスケルトンを生成
  • 中身を変更
  • インストール
    • ./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 してあげる必要がある、と。

もう少しナニしたいけど

若干限界気味。ブラウザではなくて gaucherfc.http な http-get とかで取得したナニを sxml にして取り出す、な試験もしたかったんですが延期。

といいつつ

ちょっとヤッてみました。まず

を見つつ、試行錯誤しつつ以下をでっち上げた。

#!/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 にアクセスしないと駄目なハズなんですが、何故に正常に取れているのか謎だらけ。別途調べてエントリ入れます。