mix run
запускає ваш додаток. Просто коли ви просто вкладаєте IO.puts "something"
файл, рядок обчислюється лише під час компіляції, він нічого не робить під час виконання. Якщо ви хочете, щоб щось почалося під час запуску програми, вам потрібно вказати це у своєму mix.exs
.
Зазвичай вам потрібен верхній рівень, Application
який розпочне роботу. Щоб досягти цього, додайте mod
опцію до свого mix.exs
:
def application do
[
mod: {NewMix, []},
applications: [:logger]
]
end
А потім у цьому модулі вам потрібно реалізувати зворотний виклик, який буде викликаний при запуску програми:
defmodule NewMix do
use Application
def start(_type, _args) do
IO.puts "starting"
end
end
start
Як передзвонити повинен фактично налаштувати ваш верхній рівень процесу або нагляд корінь дерева , але в цьому випадку ви вже бачать , що вона викликається кожен раз , коли ви використовуєте mix run
, хоча слід помилка.
def start(_type, _args) do
IO.puts "starting"
Task.start(fn -> :timer.sleep(1000); IO.puts("done sleeping") end)
end
У цьому випадку ми починаємо простий процес у нашому зворотному виклику, який просто перебуває в режимі сну протягом однієї секунди, а потім видає щось - цього достатньо, щоб задовольнити API start
зворотного виклику, але ми цього не бачимо "done sleeping"
. Причиною цього є те, що за замовчуванням mix run
буде закрито після завершення виконання зворотного виклику. Щоб цього не сталося, вам потрібно скористатися mix run --no-halt
- у цьому випадку ВМ не буде зупинено.
Ще один корисний спосіб запуску програми iex -S mix
- це буде поводитися подібним чином, mix run --no-halt
але також відкриватиме iex
оболонку, де ви зможете взаємодіяти з вашим кодом та вашим запущеним додатком.
.exs
файл), але робите це в контексті вашої програми-міксу, ви можете запуститиmix run <script>
. Дивітьсяmix help run
додаткову інформацію.