今日は
のあたりを確認しつつ控えを列挙。
- Phoenix アプリケーションは管理されたプロセスとして Endpoint を起動
- default では Endpoint は監視対象プロセスとして application.ex の監視ツリーに追加される
- 各リクエストは Entpoint の中のアプリケーションの内側でライフサイクルを開始して終了する
- Entpoint は Router を呼び出す前に Web サーバの起動といくつかの定義済み Plug による要求の変換を処理する
以下は Application の例、のはず。
defmodule Hello.Application do
use Application
def start(_type, _args) do
...
children = [
HelloWeb.Endpoint
]
opts = [strategy: :one_for_one, name: Hello.Supervisor]
Supervisor.start_link(children, opts)
end
end
なんとなく、Supervisor の children として Endpoint が指定されている記述に見えます。
Endpoint Contents
Up and Running で作った Endpoint は以下のはず。
defmodule Hello.Endpoint do
use Phoenix.Endpoint, otp_app: :hello
socket "/socket", Hello.UserSocket
# Serve at "/" the static files from "priv/static" directory.
#
# You should set gzip to true if you are running phoenix.digest
# when deploying your static files in production.
plug Plug.Static,
at: "/", from: :hello, gzip: false,
only: ~w(css fonts images js favicon.ico robots.txt)
# Code reloading can be explicitly enabled under the
# :code_reloader configuration of your endpoint.
if code_reloading? do
socket "/phoenix/live_reload/socket", Phoenix.LiveReloader.Socket
plug Phoenix.LiveReloader
plug Phoenix.CodeReloader
end
plug Plug.RequestId
plug Plug.Logger
plug Plug.Parsers,
parsers: [:urlencoded, :multipart, :json],
pass: ["*/*"],
json_decoder: Poison
plug Plug.MethodOverride
plug Plug.Head
# The session will be stored in the cookie and signed,
# this means its contents can be read but not tampered with.
# Set :encryption_salt if you would also like to encrypt it.
plug Plug.Session,
store: :cookie,
key: "_hello_key",
signing_salt: "V+XOatdV"
plug Hello.Router
end
- 最初の呼び出しは
use Phoenix.Endpoint, otp_app: :hello
で opt_app は設定に使われて、Phoenix.Endpoint マクロはいくつかの関数を定義、で良いのかどうか - `socket/@ という URI で socket を定義しています
- ただし、websocket とか longpoll などの宣言? は上の例では見あたりません
- Plug.Static の記述、gzpi: true にしてあれば静的ファイルを gzipeed できるらしい
- 静的ファイルは priv/static から提供、とあります
- 現状だと、
web/static
になるのかどうか
if code_reloading?
のあたりはコード変更に伴う自動 reload ですね- 開発環境では default で有効とのこと
config :hello, HelloWeb.Endpoint, code_reloader: true
で設定されるって書いてあるのですが、これってどこで指定するんだろ
- Plug.RequestId はリクエスト毎に固有の ID を生成
- Plug.Logger は default でリクエストパス、ステイタス、時刻を記録
- Plug.Session は session cookie と session store を管理
- default では最後の Plug は Router
ええと再読み込み云々は config/dev.exs
だと以下な記載でした。
config :hello, Hello.Endpoint,
http: [port: 8080],
debug_errors: true,
code_reloader: true,
check_origin: false,
watchers: [node: ["node_modules/brunch/bin/brunch", "watch", "--stdin",
cd: Path.expand("../", __DIR__)]]
確かに有効になっていますね。