Как запустить файл Elixir с помощью стека Phoenix - PullRequest
1 голос
/ 09 января 2020

Я новичок в экосистеме эликсира. У меня есть скрипт импорта в моем приложении Elixir / Phoenix, и когда я пытаюсь запустить его из командной строки, он не работает, потому что стек phoenix не загружается с моей командой.

Вот что я пытается запустить:

elixir lib/mix/tasks/import/users.ex

и я получаю: ** (CompileError) lib/mix/tasks/import/users.ex:7: module Mix.Ecto is not loaded and could not be found

Есть ли способ сказать моей команде, чтобы загрузить стек?

и вот мои пользователи .ex import

defmodule Mix.Tasks.Import.Users do
  @moduledoc """
    Import predefined users.
  """

  use Mix.Task
  import Mix.Ecto
  alias App.Shield.Resources.User

  @shortdoc "Import users"
  def run(args) do
    repos = parse_repo(args)

    Enum.each repos, fn repo ->
      Mix.shell.info "=== User Import (CSV) ==="

      ensure_repo(repo, args)
      ensure_started(repo, [])

      static_path = Application.app_dir(:corsair, "priv/static")

      File.stream!("#{static_path}/User.csv")
      |> CSV.decode(headers: true)
      |> Task.async_stream(Mix.Tasks.Import.Users, :process_csv_row, [repo])
      |> Enum.to_list()
    end
  end

  def process_csv_row(row, repo) do
    user = %{
      first_name: row["first_name"],
      last_name: row["last_name"],
      email: row["email"]
    }

    changeset = User.registration_on_subdomain_changeset(%User{}, user)

    case repo.insert(changeset) do
      {:ok, user} ->
        Bunt.puts [:color83, "User #{user.first_name} #{user.last_name} created"]
      {:error, changeset} ->
        Bunt.puts [:color197, "Problem with #{row["email"]}"]
        IO.inspect changeset.errors
    end
  end
end

1 Ответ

1 голос
/ 09 января 2020

Я наконец нашел в документации, как запускать пользовательские задачи. В моем случае это было.

mix import.users

Я пытался mix tasks.import.users, но ключевое слово tasks не обязательно

Вот документация на всякий случай

https://hexdocs.pm/phoenix/phoenix_mix_tasks.html#creating -our-own-mix-tasks

...