ちょっとした Web サーバが欲しくなったときに使えるコードの覚え書きです。
基本の形は Plug のドキュメントに書かれている通りです。
任意の Content-Type のレスポンスを返せるように :mimerl
を使って Content-Type を設定するようにしたのが唯一の工夫です。
Mix.install([:plug, :plug_cowboy, :mimerl]) defmodule MyPlug do import Plug.Conn def init(options) do # initialize options options end def call(conn, _opts) do path = Path.expand("./" <> conn.request_path, File.cwd!()) context_type = :mimerl.filename(path) conn |> put_resp_content_type(context_type) |> send_resp(200, File.read!(path)) end end webserver = {Plug.Cowboy, plug: MyPlug, scheme: :http, options: [port: 4000]} {:ok, _} = Supervisor.start_link([webserver], strategy: :one_for_one) Process.sleep(:infinity)
あとはファイルに保存して Elixir で実行するだけです。
# 上記のコードを web_server.exs というファイル名で保存し、elixir コマンドで実行する
$ elixir web_server.exs
Phoenix Framework を利用したことがあれば Plug のしくみは馴染みのあるものなので、手を加えるのも比較的容易かと思います。