CowboyとElixirで静的ページを表示する
ElixirとCowboyを使って、Webページを表示するための記事です。
解説が間違っていた場合には、コメントか@hayabusa333にご連絡くださると嬉しいです。
# Cowboy is 何?
CowboyはErlangで書かれた小さくて高速なモジュラー形式のHTTPサーバです。
今回はElixirでCowboyを使い静的ページを表示したいと思います。
# 実行環境
OS:OS X Yosemite
Erlang:Eshell V6.5, OTP-Version 18
Elixir:v1.0.4
# Cowboyで静的なページを表示するための新規プロジェクトの作成
$ mix new static_hello_world --sup $ cd my_ecto
# HexにてCowboyをインストールするために設定ファイルの記載を行う
$ vim mix.exs
mix.exsの内容は下記となります。
defmodule StaticHelloWorld.Mixfile do use Mix.Project def project do [app: :static_hello_world, version: "0.0.1", elixir: "~> 1.0", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, deps: deps] end # Configuration for the OTP application # # Type `mix help compile.app` for more information def application do [applications: [:logger, :cowboy, :ranch], mod: {StaticHelloWorld, []}] end # Dependencies can be Hex packages: # # {:mydep, "~> 0.3.0"} # # Or git/path repositories: # # {:mydep, git: "https://github.com/elixir-lang/mydep.git", tag: "0.1.0"} # # Type `mix help deps` for more examples and options defp deps do [{ :cowboy, "1.0.0" }] end end
# Cowboyにて静的ページを表示するためにCowboyの起動に関するコードを記載する
$ vim lib/supervisor.ex
defmodule StaticHelloWorld.Supervisor do use Supervisor def start_link(_) do {:ok, sup} = Supervisor.start_link(__MODULE__, [], name: :supervisor) end def init(_) do processes = [] {:ok, {{:one_for_one, 10, 10}, processes}} end end
$ vim lib/static_hello_world.ex
defmodule StaticHelloWorld do def start(_type, _args) do dispatch = :cowboy_router.compile([ { :_, [ {"/", :cowboy_static, {:priv_file, :static_hello_world, "index.html"}} ] } ]) { :ok, _ } = :cowboy.start_http(:http, 100, [{:port, 8080}], [{ :env, [{:dispatch, dispatch}]}]) end end
# 実際に表示する静的ページを作成する
$ mkdir priv $ vim priv/index.html
Hello World!
# Cowboyを起動する
$ mix deps.get $ mix run --no-halt
ブラウザにて http://localhost:8080 にアクセスし
HelloWorldと表示されたら成功です。
# まとめ
今回はElixirでCowboyを使用し静的なWebページを表示してみました。
Plugを使えば、もっと簡単に表示することもできますが下側からPlugが何をしているのかを追いかけてみるために参考になればと思い記事を買いてみました。
次回以降からは動的なページやCookieなど他の要素も紹介していければとも思いますので、宜しくお願いいたします。
それでは皆さま、良いElixirライフを