【问题标题】:How to run a Elixir file with phoenix stack如何使用 phoenix stack 运行 Elixir 文件
【发布时间】:2020-04-26 12:13:14
【问题描述】:

我是 elixir 生态系统的新手。我的 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

有没有办法告诉我的命令加载堆栈?

这是我的 users.ex 导入

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

【问题讨论】:

    标签: elixir phoenix-framework


    【解决方案1】:

    我终于在文档中找到了如何运行自定义任务。 在我的情况下,它是。

    mix import.users

    我尝试过mix tasks.import.users,但任务关键字不是必需的

    这是文档以防万一

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

    【讨论】:

      猜你喜欢
      • 2017-12-16
      • 1970-01-01
      • 2017-10-09
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多