在伞应用程序中运行混合ecto种子文件

时间:2017-04-23 02:35:23

标签: elixir ecto

许多Ecto混音任务在伞形应用程序的顶层工作。 seed.exs文件可以在伞的顶层运行吗?我想在保护伞中添加mix ecto.reset别名。我可以运行dropcreatemigrate任务。但我无法弄清楚如何运行每个应用程序的种子文件。

我想了解别人如何解决这个问题。

2 个答案:

答案 0 :(得分:0)

自定义递归混合任务可能有效

defmodule Mix.Tasks.Ecto.Seed do
  use Mix.Task

  @recursive true

  def run(_args) do
    Mix.Tasks.Run.run(["priv/repo/seeds.exs"])
  end
end

答案 1 :(得分:0)

我知道这个线程很旧,但是我需要在今天早些时候这样做,并提出了一个小的解决方案,可以帮助其他人解决相同的问题。

@Mike Buhot的回答很好,但是我不想创建任务或模块,我也想使用顶层priv文件夹中的seeds.exs文件。 只需将以下代码段添加到您的顶级seed.exs中,它将运行您在伞状应用程序中可能拥有的所有种子。

umbrella_directory = "./apps/"
seeds_path = "/priv/repo/seeds.exs"

umbrella_directory
|> File.ls!()
|> Enum.filter(&File.dir?(Path.join(umbrella_directory, &1)))
|> Enum.each(fn(directory) ->
  app_seeds = Path.join([umbrella_directory, directory, seeds_path])
  case File.exists?(app_seeds) do
    true -> Mix.Tasks.Run.run([app_seeds])
    _ -> :ok
  end
end)

然后运行$ mix run priv/repo/seeds.exs将解决问题。