Cannot compile quantum with Elixir 1.6.1

I’m attempting to add quantum to a phx.new project and encountering the following compiler error:

== Compilation error in file lib/quantum_phoenix/scheduler.ex ==
** (CompileError) lib/quantum_phoenix/scheduler.ex:2: Crontab.CronExpression.__struct__/0 is undefined, cannot expand struct Crontab.Cr
onExpression
    (stdlib) lists.erl:1354: :lists.mapfoldl/3
    lib/quantum_phoenix/scheduler.ex:2: (module)
    (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
    (elixir) lib/kernel/parallel_compiler.ex:198: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/6

My application (lib/quantum_phoenix/application.ex):

defmodule QuantumPhoenix.Application do
  use Application

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

    children = [
      supervisor(QuantumPhoenix.Repo, []),
      supervisor(QuantumPhoenixWeb.Endpoint, []),
      worker(QuantumPhoenix.Scheduler, []),
    ]

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

  def config_change(changed, _new, removed) do
    QuantumPhoenixWeb.Endpoint.config_change(changed, removed)
    :ok
  end
end

My quantum scheduler (lib/quantum_phoenix/scheduler.ex):

defmodule QuantumPhoenix.Scheduler do
  use Quantum.Scheduler, otp_app: :quantum_phoenix
end

And my config/dev.exs:

# ... all the phx.new defaults

config :quantum_phoenix, QuantumPhoenix.Scheduler,
  jobs: [
    phoenix_job: [
      schedule: "*/2 * * * *",
      task: {QuantumPhoenix.Task, :work, []},
    ]
  ]

I am using Phoenix 1.3.0 and elixir 1.6.1/OTP 20.

From what I understand (which is not much since i’m new to Elixir and Phoenix), this error typically involves trying to reference a namespaced module without specifying the full namespace. I can’t find anywhere in my own code where I’m incorrectly namespacing things so my assumption is that this is an issue how my phoenix project is interacting with Quantum. I have a similar setup in an on Phoenix project that compiles just fine.

Hmm I’m using it just fine on Elixir 1.6.1.

And Phoenix really should have absolutely nothing to do with this (so I’m fixing up the title). ^.^

This sounds most to me like a corrupt _build directory, wipe it and try again? If that still happens then minimize the issue and post is a public git repo after it is minimized. :slight_smile:

1 Like

Blowing away _build seems to have done the trick. Thanks!

As I said, i’m new to elixir and phoenix, what is the typical reason behind something like this? All I did was do a phx.new and then add quantum and mix deps.get? (i’m happy to post that as an additional question if it’s preferred).

1 Like

I only ever see it happen in two cases:

  1. Had an Erlang/Elixir version change (like upgrading the system versions, you want to recompile everything then).
  2. Using Windows (NTFS is a horrible filesystem).

^.^;

1 Like