I have a simple module that, when invoked, lists all records in a table.
defmodule App.Adapter do alias App.Repo def list_all(model) do Repo.all(model) end end
I want to have a simple mix task such that I can invoke this function.
defmodule Mix.Tasks.ListAllThings do use Mix.Task def run(_) do App.Adapter.list_all(App.Thing) end end
If I try to invoke this task (and the task does exist), the error is
(RuntimeError) could not lookup App.Repo because it was not started or it does not exist. I have a supervisor and am able to run these queries from
iex -S mix in the console. Everything I have looked up about this so far has suggested using
import Mix.Ecto but none of the helper method seem to behave to me (
#ensure_started doesn’t make sense to me).
list_all task is meant as a quick proof of concept for a small app that essentially just acts as a bundle of scripts to interface with a DB on the fly (no API involved and the app does not persist on a machine for any period of time beyond running the script). Am I just tangling myself in an anti-pattern? If I want to just write elixir scripts to interface with a DB should I be approaching this with something other than tasks?