在混合任务中使用Ecto

win*_*yer 3 elixir ecto phoenix-framework

在Phoenix Framework应用程序中,我有一个Product该领域的模型name.我想创建一个列出所有产品名称的混合任务.

在Ruby on Rails中,这将是解决问题的代码:

namespace :list do
  desc "List all products"
  task products: :environment do
    Product.all.each do |product|
      puts product.name
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

在凤凰城,我甚至无法从数据库中获取所有产品的列表.这是任务代码:

LIB /混合/任务/ list.product.ex

defmodule Mix.Tasks.List.Product do                                    
  use Mix.Task
  import Mix.Ecto
  alias App.Repo
  alias App.Product

  def run(_args) do
    products = Repo.all(Product)
  end
end
Run Code Online (Sandbox Code Playgroud)

当我运行此任务时,我收到此错误消息:

** (UndefinedFunctionError) function Ecto.Queryable.__using__/1 
is undefined or private
Run Code Online (Sandbox Code Playgroud)

在此混合任务中,如何从数据库中获取所有产品?

kar*_*aze 6

ensure_started(Repo, [])run方法的顶部添加.您可能还想要import Ecto.Query一些查询表单.

defmodule Mix.Tasks.List.Product do                                    
  use Mix.Task
  import Mix.Ecto
  import Ecto.Query
  alias App.Repo
  alias App.Product

  def run(_args) do
    ensure_started(Repo, [])
    products = Repo.all(Product)
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 它在 Phoenix 1.4 "undefined function ensure_started/2" 中不起作用 (2认同)