在 Elixir 裡面沒有像有些語言一樣有特定的 main 之類的程式執行點
早些有提到,一次執行的大部分都使用 exs
的 script 執行。
但 Elixir 真正厲害的是執行像是網頁伺服器這種需要長時間啟動的應用程式。
讓我們建立一個新的 Mix 專案
mix new my_site
在這個專案資料夾裡的 mix.exs
我們可以調整 application 函式
def application do
[
mod: {MySite, []},
extra_applications: [:logger]
]
end
在這個函式的 keyword list 裡,我們可以放入要讓這個 mix 專案啟動時要執行的 application
預設有負責 log 資訊的 logger,
另外還有多種方式可以告訴 mix 這個專案啟動的時候底下要啟動並維護的 application 有哪些
如同註解寫的我們可以透過 mix help compile.app
來查看這邊可以接受的 application 格式
不過我們現在先使用 module 的方式定義 application
在 application keyword list 裡面加一個 mod: {MySite, []},
我們接下來要把 MySite 模組 (lib/my_site.ex
) 變成這裡需要的 application
defmodule MySite do
use Application
end
Elixir 有內建一個 Application
模組讓我們 use
這個 use 裡面的 __use__
函式同時定義了 behaviour
這個 behaviour 告訴我們要在這個的模組定義叫做 start/2
的函式
defmodule MySite do
use Application
def start(_type, _args) do
children = []
Supervisor.start_link(children, [strategy: :one_for_one])
end
end
start callback 函式說明裡,寫著他需要回傳 {:ok, pid}
這種格式
在這邊他想要得到的是 Elixir process 監督樹上的 process id
我們先給他一個底下沒有 children 的監督者滿足條件,後面會詳細說明這一塊
使用 mix run 來執行我們的專案
mix run --no-halt
這樣我們的伺服器就跑起來了,
不過現在什麼都不能做,在接下來裝上網頁伺服器之前
可以使用 ctrl + c 兩次將他關閉