2017-11-08に投稿

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: "[email protected]"})
    Repo.update!(changeset)

    IO.inspect(user)
  end
end

ツイッターでシェア
みんなに共有、忘れないようにメモ

だら@Crieit開発者

Crieitの開発者です。 Webエンジニアです(在宅)。大体10年ちょい。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel, React, Flutter, Vue.js, Node, RoR 趣味:Elixir, Phoenix, Nuxt, Express, GCP, AWS等色々 PHPフレームワークちいたんの作者

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント