Struggle setting up Quantum to send monthly notifications

Hello dear Elixir enthusiasts,

excuse my possible nooby coding, i’m new to the elixir/erlang world.

I’m currently trying to setup an application which will send monthly/daily reports via email.
I managed to get the part working where an email gets send etc. but i failed to setup a scheduler which performs a task to send the email periodically or at a specific date.
I tried it with quantum because it was the most recommended!
Because it did not work inside my existing application i tried to set quantum up from scratch on a fresh native elixir project by following this documentation hexdocs.pm/quantum/, naming it
:quantum_example

This is the code i used (it looks nearly like the one of the documentation):
the deps part of mix.exs:

defp deps do
    [
        {:quantum, "~> 3.0"}
      # {:dep_from_hexpm, "~> 0.3.0"},
      # {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"}
    ]
  end

The scheduler:

defmodule QuantumExample.Scheduler do
  use Quantum, otp_app: :quantum_example
end

The application’s supervision tree:

defmodule QuantumExample.Application do
  use Application

  def start(_type, _args) do
    import Supervisor.Spec, warn: false

    children = [
      QuantumExample.Scheduler
    ]

    opts = [strategy: :one_for_one, name: Quantum.Supervisor]
    Supervisor.start_link(children, opts)
  end
end

And to test its functionality i set up this config with IO.puts stuff to see if it is doing where i want it to do it:

import Config

config :logger, level: :debug

config :quantum_example, QuantumExample.Scheduler,
  jobs: [
    {"@secondly",       fn -> IO.puts("this is a secondly testoutput!") end},
    {"@minutely",       fn -> IO.puts("this is a minutely testoutput!") end},
  ]

My Problem is that it does not even do anything at all. the quantum_example application starts (iex -S mix or mix run --no-halt) without any error but neither every second nor every minute i get an IO.puts output. Not even the logger gives something. Not even saying a job got added or startet or failed.
I am sure I just failed to do the configuration properly. It feels like quantum does not even get started…
Btw I am on Elixir 1.10 and used quantum 3.0.
I appreciate any form of advise what to try out or where I took a wrong turn!
Thanks in advance everybody (:

Hello and welcome,
Well, it looks good, I reproduced it by just copy/paste your topic and it worked.

18:21:27.891 [debug] [:nonode@nohost][Elixir.Quantum.Executor] Task for job #Reference<0.1224732984.3074162690.196567> started on node nonode@nohost
this is a secondly testoutput!

Did You create the project with --sup?
Do You have a /config/config.exs, with name ending with .exs?

1 Like

Wow, thanks for your fast reply!
well no i did not generate it with --sup. But i tried it with --sup and now it works for me too! thank u so much!
My question now is: is there a way to generate the otp app skeleton in my existing project? or do i have to create a new project and feed it with all my existing modules?

In your mix.exs in your application/0 function you need to have mod: {QuantumExample.Application, []}. So your mix.exs will look something like:

defmodule QuantumExample.Mixproject do
  # …

  def application do
    [
      mod: {QuantumExample.Application, []}
    ]
  end

  # …
end
2 Likes

Is it an umbrella project?

If yes it will be easy, if not You can package into a module, and add to dependencies…

Or just copy file, and configure accordingly.

1 Like