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

Posted

技术标签:

【中文标题】在伞形应用程序中运行混合 ecto 种子文件【英文标题】:Running mix ecto seeds files in umbrella app 【发布时间】:2017-04-23 02:35:22 【问题描述】:

许多 Ecto 混合任务在伞形应用的顶层运行。 seed.exs 文件可以在伞的顶层运行吗?我想将 mix ecto.reset 别名添加到伞。我可以运行dropcreatemigrate 任务。但我不知道如何运行每个应用程序的种子文件。

我想了解其他人是如何解决这个问题的。

【问题讨论】:

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 种子文件的主要内容,如果未能解决你的问题,请参考以下文章

怎么找种子 如何找种子

种子下载完成后传输将不会运行 shell 脚本

带有 Knex 的 nestjs:无法在生产中迁移和运行种子

从控制器运行种子方法

强制量角器等待种子数据加载

在 Django 中,您可以在不总是生成迁移的情况下运行种子数据吗?