vida tutorial strings sinonimo lenguaje inmortal framework elixir

tutorial - ¿Cómo ejecutar la aplicación Elixir?



elixir strings (2)

Puede ejecutar tareas importando Mix.Task en su módulo en lugar de mix run .

Creo que this es lo que estás buscando.

Además de eso, en lugar de mix <task.run> , simplemente puede ejecutar mix para ejecutar la tarea predeterminada. Simplemente agregue default_task: "bot.run" en la lista del def project do [..] end en mix.exs . Consulte here

¿Cuál es la forma correcta de ejecutar una aplicación Elixir?

Estoy creando un proyecto simple por:

mix new app

y después de eso puedo hacer:

mix run

que básicamente compila mi aplicación una vez. Entonces cuando agrego:

IO.puts "running"

en lib/app.ex veo "running" solo por primera vez, cada run consecutiva no hace nada a menos que haya algunos cambios. ¿Qué puedo hacer a continuación con app.app generado?

Por supuesto que sé que puedo hacer:

escript: [main_module: App]

en mix.exs , proporcione def main(args): y luego:

mix escript.build ./app

pero es un poco engorroso en mi opinión.

También hay algo como:

elixir lib/app.exs

pero no cuenta mix.exs obviamente, que es necesario para las dependencias en mi app .


mix run ejecuta tu aplicación. Es solo que cuando simplemente coloca IO.puts "something" en un archivo que la 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 una Application nivel superior que se inicie. Para lograrlo, agregue una opción de mod a su mix.exs :

def application do [ # this is the name of any module implementing the Application behaviour 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" # some more stuff end end

La devolución de llamada de start debería configurar el 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 usa la 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 comenzando un proceso simple en nuestra devolución de llamada que solo duerme por un segundo y luego genera algo; esto es suficiente para satisfacer la API de la devolución de llamada de start pero no vemos "done sleeping" . La razón de esto es que, por defecto, la mix run cerrará una vez que la devolución de llamada haya terminado de ejecutarse. Para que eso no suceda, debe usar la mix run --no-halt , en este caso la VM no se detendrá.

Otra forma útil de iniciar su aplicación es iex -S mix , que se comportará de manera similar para mix run --no-halt pero también abrir un shell iex donde puede interactuar con su código y su aplicación en ejecución.