一人もくもく会 α verでサービス開始しました。
請求書作成システム α verでサービス開始しました。

PhoenixのTaskでDBにアクセスする

PhoenixでTaskを試した。

実際にはPhoenixではなくmix自体のtaskを作成して実行するだけ。

ただ、単にtask内でRepoを使ってDBアクセスしようとすると下記のようなエラーが出る。

repo App.Repo is not started, please ensure it is part of your supervision tree

どうもRepoはちゃんとスタートさせなければならないらしい。

最終的に下記の様にRepoの初期化を入れることで動いた。

defmodule Mix.Tasks.Aiue.Oooo do
  use Mix.Task

  alias App.Repo
  alias App.User

  import Mix.Ecto

  @shortdoc "aiueo"

  @moduledoc """
    This is aiuoe
  """

  def run(args) do
    Mix.shell.info "=== Active user ==="

    ensure_repo(Repo, args)
    ensure_started(Repo, [])
    user = Repo.one!(User)

    changeset = User.changeset(user, %{email: "test@example.com"})
    Repo.update!(changeset)

    IO.inspect(user)
  end
end