Comment puis-je programmer du code pour qu’il s’exécute toutes les quelques heures dans le framework Elixir ou Phoenix?

Alors, disons que je veux envoyer un tas d’emails ou recréer un sitemap ou autre chose que toutes les 4 heures, comment ferais-je cela à Phoenix ou juste avec Elixir?

    Il existe une alternative simple qui ne nécessite aucune dépendance externe:

    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 

    Maintenant dans votre arbre de supervision:

     worker(MyApp.Periodically, []) 

    Quantum vous permet de créer, rechercher et supprimer des tâches lors de l’exécution.

    De plus, vous pouvez transmettre des arguments à la fonction de tâche lors de la création d’un travail cron, et même modifier le fuseau horaire si vous n’êtes pas satisfait de l’UTC:

    https://github.com/c-rack/quantum-elixir

    Si votre application s’exécute sous la forme de plusieurs instances isolées (par exemple, Heroku), il existe des processeurs de travail soutenus par Redis, qui prennent également en charge la planification des tâches:

    Exq: https://github.com/akira/exq

    Toniq: https://github.com/joakimk/toniq

    Verk: https://github.com/edgurgel/verk

    Vous pouvez utiliser erlcron pour ça. Vous l’utilisez comme

     job = {{:weekly, :thu, {2, :am}}, {:io, :fwrite, ["It's 2 Thursday morning~n"]}} :erlcron.cron(job) 

    Un job est un tuple à 2 éléments. Le premier élément est un tuple qui représente le planning du job et le second élément est la fonction ou un MFA (Module, Function, Arity). Dans l’exemple ci-dessus, nous courons :io.fwrite("It's 2 Thursday morning") toutes les 2 heures du jeudi.

    J’espère que cela pourra aider!

    J’ai utilisé la bibliothèque Quantum- Elixir de Quantum.
    Suivez les instructions ci-dessous.

     #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 ] 

    Tous ensemble Démarrez le serveur en exécutant la commande ci-dessous.

     iex -S mix phoenix.server 

    En plus d’utiliser Process.send_after , vous pouvez aussi utiliser : timer.apply_interval .