在伞形应用程序中运行混合 ecto 种子文件
Posted
技术标签:
【中文标题】在伞形应用程序中运行混合 ecto 种子文件【英文标题】:Running mix ecto seeds files in umbrella app 【发布时间】:2017-04-23 02:35:22 【问题描述】:许多 Ecto 混合任务在伞形应用的顶层运行。 seed.exs 文件可以在伞的顶层运行吗?我想将 mix ecto.reset
别名添加到伞。我可以运行drop
、create
和migrate
任务。但我不知道如何运行每个应用程序的种子文件。
我想了解其他人是如何解决这个问题的。
【问题讨论】:
mix run apps/p/priv/repo/seeds.exs
有效。或者你想用一个命令运行所有的seeds.exs?
最终我想从一个命令中运行它们。但是,我需要控制它们的运行顺序。
【参考方案1】:
我知道这个帖子很旧,但我今天早些时候需要这样做,并想出了一个小解决方案,可以帮助其他人解决同样的问题。
@Mike Buhot 的回答很好,但我不想创建任务或模块,而且我还想使用*** priv 文件夹中的 seed.exs 文件。 只需将以下 sn-p 添加到您的***种子.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
就可以了。
【讨论】:
【参考方案2】:自定义递归混合任务可能会起作用
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
【讨论】:
以上是关于在伞形应用程序中运行混合 ecto 种子文件的主要内容,如果未能解决你的问题,请参考以下文章