elixir - mac - phoenix framework tutorial
¿Cómo puedo programar el código para que se ejecute cada pocas horas en el marco Elixir o Phoenix? (6)
Entonces, digamos que quiero enviar un montón de correos electrónicos o recrear el mapa del sitio o lo que sea cada 4 horas, ¿cómo haría eso en Phoenix o simplemente con Elixir?
Además de usar
Process.send_after
, también puedes usar
:timer.apply_interval
.
Hay una alternativa simple que no requiere ninguna dependencia externa:
defmodule MyApp.Periodically do
use GenServer
def start_link do
GenServer.start_link(__MODULE__, %{})
end
def init(state) do
schedule_work() # Schedule work to be performed at some point
{:ok, state}
end
def handle_info(:work, state) do
# Do the work you desire here
schedule_work() # Reschedule once more
{:noreply, state}
end
defp schedule_work() do
Process.send_after(self(), :work, 2 * 60 * 60 * 1000) # In 2 hours
end
end
Ahora en su árbol de supervisión:
worker(MyApp.Periodically, [])
Puedes usar erlcron para eso. Lo usas como
job = {{:weekly, :thu, {2, :am}},
{:io, :fwrite, ["It''s 2 Thursday morning~n"]}}
:erlcron.cron(job)
Un
job
es una tupla de 2 elementos.
El primer elemento es una tupla que representa la programación del trabajo y el segundo elemento es la función o un MFA (Módulo, Función, Aridad).
En el ejemplo anterior, ejecutamos
:io.fwrite("It''s 2 Thursday morning")
cada 2 de la mañana del jueves.
¡Espero que ayude!
Quantum permite crear, encontrar y eliminar trabajos en tiempo de ejecución.
Además, puede pasar argumentos a la función de tarea al crear un cronjob e incluso modificar la zona horaria si no está satisfecho con UTC:
Si su aplicación se ejecuta como varias instancias aisladas (por ejemplo, Heroku), hay procesadores de trabajo respaldados por Redis, que también admiten la programación de tareas:
Exq: https://github.com/akira/exq
Quantum
biblioteca Quantum Quantum
Quantum
.
Siga las instrucciones a continuación.
#your_app/mix.exs
defp deps do
[{:quantum, ">= 1.9.1"},
#rest code
end
#your_app/mix.exs
def application do
[mod: {AppName, []},
applications: [:quantum,
#rest code
]]
end
#your_app/config/dev.exs
config :quantum, :your_app, cron: [
# Every minute
"* * * * *": fn -> IO.puts("Hello QUANTUM!") end
]
Todo listo. Inicie el servidor ejecutando el siguiente comando.
iex -S mix phoenix.server