Cannot compile quantum with Elixir 1.6.1

phoenix
quantum

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


#2

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:


#3

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).


#4

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).

^.^;