许多Ecto混音任务在伞形应用程序的顶层工作。 seed.exs文件可以在伞的顶层运行吗?我想在保护伞中添加mix ecto.reset
别名。我可以运行drop
,create
和migrate
任务。但我无法弄清楚如何运行每个应用程序的种子文件。
我想了解别人如何解决这个问题。
答案 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
将解决问题。