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

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

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

【问题讨论】:

  • mix run apps/p/priv/repo/seeds.exs 有效。或者你想用一个命令运行所有的seeds.exs?
  • 最终我想从一个命令中运行它们。但是,我需要控制它们的运行顺序。

标签: elixir ecto


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-25
      • 2017-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多