IoをCGIで使う
なんとなくウェブサーバ上でIo (IoLanguage)のスクリプトが動かしたくなって、mod_ioを入れようとしたらサイトが落ちているようでダウンロードできず。しかたないので、lighttpdでCGIとして動かしました。
lighttpd側の準備は、server.modulesにmod_cgiを加えて、
server.modules = (
...,
"mod_cgi"
)
拡張子が.ioのファイルにIoのインタプリタをアサインすれば完了。
cgi.assign = ( ".io" => "/usr/local/bin/io" )
あとは、以下のようなスクリプトを用意してブラウザからアクセスすれば、古き良きCGIとして動いてくれます。
#!/usr/local/bin/io "Content-Type: text/html\n\n" print page := Object clone do( html := " <html> <head> <title>{title}</title> </head> <body> <h1>{title}</h1> <ul> </ul> <p> Generated at {now}<br/> Powered by {version}<br/> </p> </body> </html>" values := Map clone bind := method(key, value, self values atPut(key, value) ) render := method( buf := self html asBuffer self values foreach(key, value, buf replaceSeq("{" .. key .. "}", value) ) buf print ) ) page bind("title", "Hello, IoLanguage") page bind("now", Date now asString) page bind("version", System version asString) page render exit
さすがに「HTMLと変数をセットでprint」ってのは避けたかったので、テンプレートエンジンもどきみたいな構造になってますが、Ioは手探りで書いている現状なのでこれでいいのかどうなのか…。

