ErlangでWebアプリ

mzp2008-10-11

30分プログラム、その387。yawsを使ってErlangでWebアプリを作ってみた。
Webアプリの内容はなんでもよかったので、適当に階乗を計算するやつにしてみた。

割としっかりしてる印象を受ける。もしかしたら、コマンドラインで動作するプログラムよりも簡単にWebアプリが作れるかもしれない。

インストール

MacPortsで楽々インストール。

$ port install yaws

起動

設定ファイルをコピーしてきて適宜書き換えて、起動する。

$ cp /opt/local/etc/yaws.conf.template yaws.conf
$ vim yaws.conf
$ yaws -i --conf yaws.conf

あとは、http://localhost:8080/fact.yawsを開けばOK。

ちなみにボクのyaws.confはこんな感じ。root権限がなくても起動できるようにした。

# 変更
logdir = ./

ebin_dir = /opt/local/lib/yaws/ebin
ebin_dir = /opt/local/var/yaws/ebin
include_dir = /opt/local/lib/yaws/include
trace = false
copy_error_log = true
log_wrap_size = 1000000
log_resolve_hostname = false
fail_on_bind_err = true
auth_log = true
pick_first_virthost_on_nomatch = true
use_fdsrv = false

# 変更!
<server localhost>
        port = 8080
        listen = 0.0.0.0
        docroot = ./
        dir_listings = true
</server>

ソースコード

<html>
<h1>Hello, world!!</h1>
<erl>
fact(0) ->
    1;
fact(N) ->
    N * fact(N-1).

out(Arg) ->
    case queryvar(Arg,"n") of
	{ok,N} ->
	    {html,integer_to_list(fact(list_to_integer(N)))};
	_ ->
	    {ehtml,
	     {form,[],
	      [{p,[],["Please input value: "]},
	       {input,[{name,n}],[]},
	       {input,[{type,submit}],[]}]}}
    end.
</erl>
</html>