hunchentoot スタンドアロンで動かす
Ruby (on Rails) ばかりやっていると、とりかえしのつかないことになりそうなので、今晩は Common Lisp をする。
仕事とプライベートの切り替えは大切だよね。
ということで Common Lisp で書かれた Web サーバ hunchentoot をスタンドアロンで動かす。
Common Lisp の場合はたいてい適当な main を書いて save-lisp-and-die みたいなことをすれば実行ファイルができる。
次のコードは SBCL でのみ動く。
exe.lisp
(eval-when (:compile-toplevel :load-toplevel :execute)
(require :hunchentoot))
(defun main ()
(let ((*invoke-debugger-hook*
(lambda (condition hook)
(declare (ignore hook))
(format *error-output* "error: ~a~%" condition)
(quit :unix-status 1)))
(document-root (second *posix-argv*))
(port (third *posix-argv*)))
(print (list document-root port))
(push (hunchentoot:create-folder-dispatcher-and-handler
"/" (make-pathname :directory document-root))
hunchentoot:*dispatch-table*)
(push (hunchentoot:create-static-file-dispatcher-and-handler
"/" (make-pathname :directory document-root :name "index.html"))
hunchentoot:*dispatch-table*)
(let ((acceptor (make-instance 'hunchentoot:acceptor
:port (read-from-string port))))
(hunchentoot:start acceptor)))
(loop (sleep 777)))
(save-lisp-and-die "hunchentoot" :toplevel #'main :executable t)
;; sbcl --load exe.lisp
;; ./hunchentoot ~/www/ 1234
シェルから
sbcl --load exe.lispすると hunchentoot というファイルができるので、ドキュメントルートとポート番号を渡して実行する。
./hunchentoot ~/www/ 1234
あれ? ちゃんと動いたけど C-c で止まんないな。。。ま、いいか。
0 件のコメント:
コメントを投稿