Cowboyとelixir
- 6. 新規プロジェクトを作成
$ mix new static_hello_world ̶sup
# mix new Elixirの新規プロジェクトを作成します
# ̶sup をつけることによって supervision treeを含んだ
OTPアプリケーションで作成されます
# 通常のmix newではsupervisorがない状態なので注意が
必要です
- 7. mix.exsを記載
def application do
[applications: [:logger, :cowboy, :ranch],
mod: {StaticHelloWorld, []}]
end
# mod: {StaticHelloWorld, []} にてアプリケーションのコールバッ
クモジュールとして指定してます
# StaticHelloWorldはsupervison treeとして起動します
defp deps do
[{ :cowboy, "1.0.0" }]
end
- 8. supervisor.exを記載
defmodule StaticHelloWorld.Supervisor do
use Supervisor
# supervisiorモジュールを起動するため
def start_link(_) do
{:ok, sup} = Supervisor.start_link(__MODULE__, [],
name: :supervisor)
end
# supervisorモジュールを起動する際に init/1 を渡す必要がある
def init(_) do
processes = []
# one_for_oneは自分自身がダメになったら他人に影響されず
# 自分自身を再起動するという戦略です。
{:ok, {{:one_for_one, 10, 10}, processes}}
end
end
- 9. static_hello_world.exを記載
defmodule StaticHelloWorld do
def start(_type, _args) do
dispatch = :cowboy_router.compile([
{ :_, [
# http://localhost:8080/ でアクセスされた場合は
static_hello_world を使うと指定
{"/", :cowboy_static, {:priv_file, :static_hello_world,
index.html"}} ] }
])
# http通信にて使用する起動環境を設定します
{ :ok, _ } = :cowboy.start_http(:http, 100, [{:port, 8080}], [{ :env,
[{:dispatch, dispatch}]}])
end
end
- 15. dynamic_hello_world.exを記載
defmodule DynamicHelloWorld do
def start(_type, _args) do
dispatch = :cowboy_router.compile([
{ :_,
[
{"/", DynamicPageHandler, []}
]}
])
{ :ok, _ } = :cowboy.start_http(:http, 100, [{:port, 8080}], [{ :env,
[{:dispatch, dispatch}]}] )
end
end
- 16. dynamic_page_handler.exを記載
defmodule DynamicPageHandler do
def init(_type, req, []) do
{:ok, req, :no_state}
end
def handle(request, state) do
# Http通信にて返信する内容を自作する
dynamic = Dynamic"
{ :ok, reply } = :cowboy_req.reply( 200, [{"content-type", "text/html"}],
"#{dynamic} Hello World", request)
{:ok, reply, state}
end
def terminate(reason, request, state) do
:ok
end
end