2015年6月2日火曜日

Emacs で Web Server - Elnode を使ってみた

概要

Elnodeなるものがあり、これでEmacs上でlispを書いてWebサーバを構築することができます
ちょっと興味があったので試してみました

環境

  • Mac OS X 10.10.3
  • Emacs 24.4.1
  • Elnode 0.9.9.8.8

Elnodeインストール

まずEmacsにElnodeをインストールします
Emacsのバージョン24以上を使っていればpacakge.elを使ってインストールすることができます

ここを元に package.el でダウンロードできるリポジトリ (marmalade, melpa) を追加します
追加できたらM-x package-list-packagesでパッケージのリストを表示します
一覧の中にelnodeがあるので i -> x とキーを押してインストールします
i でインストール対象を選択して、 x でインストールを実行します

インストールできるとelnode-startなどの命令が使えるようになります

サンプルスクリプト作成

適当なHTMLを返却することができるEmacs-lispを作成してみます

  • emacs sample_web_app.el
(defun my-test-handler (httpcon)
  "Demonstration function"
  (elnode-http-start httpcon 200 '("Content-type" . "text/html"))
  (elnode-http-return httpcon "<html><b>HELLO!</b></html>"))

(elnode-start 'my-test-handler :port 8082)

「HELLO!」という文字列を返すだけの簡単なサンプルです
上記のスクリプトを開いているバッファでeval-bufferを実行してみましょう
するとサーバが起動します(特に *Messages* にログはでません)

ブラウザでアクセスしてみる

http://localhost:8082/
にアクセスしてみましょう
先ほど設定した「HELLO!」といういう文字列がボールドされて返ってくると思います

サーバを停止する

M-x elnode-stop
で起動中のポート番号を入力してEnterでOKです
停止時は *Messages* に停止ログが出力されます
念のためブラウザで先ほどのURLにアクセスするとページが返ってこないことがわかると思います

Tips

  • Cannot bind server socket: permission denied
    LISTENするポートを1024番以上にしてください
    80番とかでサーバを起動しようとすると上記のエラーになります
  • index.htmlを表示する方法
(setq my-webserver
      (elnode-webserver-handler-maker "/path/to/elisp"))

(elnode-start my-webserver :port 8082)

「/path/to/elisp」配下に index.html を配置して同様にstartすれば index.html を自動で探して表示してくれます

最後に

他にもorg-modeと連携したりCSSを適用したり、HTTPのパラメータを取得したりといろいろできるみたいです

自分はとりあえず動作することを確認したかっただけなので、これで終わりますが 本格的にWebアプリを作ろうとしたら、DBと接続したり別のHTTPをコールしたり、MVCしたりといろいろ考えなければいけませんが、何か頑張ればできそうな気がします

.elファイルをデプロイしてemacsコマンドを使ってWebサーバを立ちあげる、なんて運用が実現できるのか・・・

参考サイト

0 件のコメント:

コメントを投稿