AllegroServeのインストール

Commonlisp(今後CL)にはasdfというパッケージシステムがあるそうです。

(require 'asdf)
(require 'asdf-install)
(asdf-install:install 'aserve)

asdfをrequireしてasdf-install:installするとwebから取って来て、依存関係を含めてコンパイルしてインストールしてくれる。

CLiki : ASDF-Installここに書いてあるパッケージを見てインストールしてくれるみたいです。

RubyでいうとGitHub RubyGemsみたいなもんなのかな?

下記の依存パッケージも入りました。

  • acl-compat
  • cl-ppcre
  • cl-unicode
  • flexi-streams
  • trival-gray-streams
  • puri
  • htmlgen

何か便利そうなのいっぱいありますね。

aserveの起動

(require 'aserve)
(net.aserve:start :port 8888)

上記で起動。

(net.aserve:publish
          :path "/" 
          :content-type "text/html; charset=utf-8" 
          :function
          #'(lambda (req ent)
              (net.aserve:with-http-response
                  (req ent)
                (net.aserve:with-http-body
                    (req ent)
                  (net.html.generator:html
                    (:html
                      (:head (:title "Hello World!"))
                      (:body "Hello World!")))))))

foo:barっていうのはメソッドかな? net.aserve:publishというのでリクエストと関数をマッピングするそうです。

「rackかsinatraみたいだ!」

と一瞬思いますが、そもそもプリミティブなHTTPってこういうもんですよね。

が、ブラウザからアクセスするとエラーが。まったくイミフですが、こちらに解決策を載せてくださってるのでそのまま実行。

長いのでファイルに保存して読み込むとか出来ないのかな?と思ってやってみました。

foo.lispという拡張子はSLIMEがSLIMEのモードとして開いてくれるらしく、C-M-xで評価できて凄く便利!

~/code/cl/boot-aserve.lisp というファイルに保存しました。

(load "code/cl/boot-aserve")

で読み込めるみたいです。

(net.aserve:publish
          :path "/" 
          :content-type "text/html; charset=utf-8" 
          :function
          #'(lambda (req ent)
              (net.aserve:with-http-response
                  (req ent)
                (net.aserve:with-http-body
                    (req ent)
                  (net.html.generator:html
                    (:html
                      (:head (:title "Hello World!"))
                      (:body "Hello World!" 
                       :br
                       (JPN "へろー"))))))))

上記を実行してブラウザのlocalhost:8888にアクセス。

Hello World!

出た。

JPNというマクロで日本語がちゃんと出るようになってるみたいです。webサーバーの方で対応したいな。他にいいwebサーバーないのかしら?

参照:

Comments


Option