手順メモ
デフォルトの設定(/usr/local/godi/etc/ocsigen.conf)では実行userやTCPポート番号辺りを適当に弄ったら動いたので、今度は自分で準備してみる。
- まずはサンプルアプリを用意(examples/tutoeliom.mlのcountを抜き出しただけ)。
open Lwt open XHTML.M open Eliom_services open Eliom_parameters open Eliom_sessions open Eliom_predefmod.Xhtml let count = let next = let c = ref 0 in (fun () -> c := !c + 1; !c) in register_new_service ~path:["count"] ~get_params:unit (fun _ () () -> return (html (head (title (pcdata "counter")) []) (body [p [pcdata (string_of_int (next ()))]])))
- こいつをコンパイル。
ocamlfind c -thread -c -package ocsigen count.ml
- 設定ファイルはこんな感じ。
<ocsigen> <server> <port>*:8888</port> <logdir>/home/mitsu/ocsigen/hoge/log</logdir> <datadir>/home/mitsu/ocsigen/hoge/data</datadir> <user>mitsu</user> <group>wheel</group> <charset>utf-8</charset> <findlib path="/usr/local/godi/lib/ocsigen/METAS"/> <extension findlib-package="ocsigen_ext.ocsipersist-sqlite"/> <extension findlib-package="ocsigen_ext.eliom"/> <host> <eliom module="/home/mitsu/ocsigen/hoge/app/count/count.cmo"/> </host> </server> </ocsigen>
- ocsigen始動。
$ ocsigen -c config/ocsigen.conf
- Webブラウザでアクセスした際のHTTPヘッダー
GET /count HTTP/1.1 Host: 192.168.0.5:8888 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ja,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cookie: mycookie=47 Pragma: no-cache Cache-Control: no-cache HTTP/1.x 200 OK Accept-Ranges: none Cache-Control: no-cache Content-Type: text/html; charset=utf-8 Date: Mon, 15 Sep 2008 08:09:40 GMT Expires: 0 Server: Ocsigen Transfer-Encoding: chunked
- ボディ部。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <!-- Page generated by OCaml with Ocsigen. See http://www.ocsigen.org and http://caml.inria.fr for information --> <html> <head> <style type="text/css"> .eliom_inline {display: inline} .eliom_nodisplay {display: none} </style> <title>counter</title> </head> <body> <p>1</p> </body> </html>
アクセスする度にpタグで囲まれた数値がインクリメントされていく。セッションも使ってないんだよねぇ。関数nextの状態がメモリ上に保持されていて、アクセスされる度に評価されるみたい。まぁ、普通のCGIみたく毎回プロセスが作られる場合だと出来ない芸当だけど、SpeedyCGIとかプロセスが常駐するパターンだと同様のことは出来ると思う。
とりあえず、もうちょっと弄くってみたいと思います。