mix run
ejecuta su aplicación. Es solo que cuando simplemente coloca IO.puts "something"
en un archivo esa línea solo se evalúa en tiempo de compilación, no hace nada en tiempo de ejecución. Si desea que algo comience cuando inicie su aplicación, debe especificarlo en su mix.exs
.
Por lo general, desea un nivel superior Application
que comience. Para lograrlo, agregue una mod
opción a su mix.exs
:
def application do
[
mod: {NewMix, []},
applications: [:logger]
]
end
Y luego, en ese módulo, debe implementar una devolución de llamada que se llamará al inicio de la aplicación:
defmodule NewMix do
use Application
def start(_type, _args) do
IO.puts "starting"
end
end
La start
devolución de llamada debería configurar su proceso de nivel superior o la raíz del árbol de supervisión, pero en este caso ya verá que se llama cada vez que lo usa mix run
, aunque seguido de un error.
def start(_type, _args) do
IO.puts "starting"
Task.start(fn -> :timer.sleep(1000); IO.puts("done sleeping") end)
end
En este caso, estamos iniciando un proceso simple en nuestra devolución de llamada que solo duerme durante un segundo y luego genera algo; esto es suficiente para satisfacer la API de la start
devolución de llamada, pero no vemos "done sleeping"
. La razón de esto es que, por defecto, se mix run
cerrará una vez que la devolución de llamada haya terminado de ejecutarse. Para que eso no suceda, debe usar mix run --no-halt
; en este caso, la máquina virtual no se detendrá.
Otra forma útil de iniciar su aplicación es iex -S mix
: esto se comportará de manera similar mix run --no-halt
pero también abrirá un iex
shell donde puede interactuar con su código y su aplicación en ejecución.
.exs
archivo) pero hacerlo en el contexto de su aplicación mixta, puede ejecutarmix run <script>
. Consultemix help run
para obtener más información.