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додаткову інформацію.