3 votes

Exécution des fichiers de semences mix ecto dans l'application umbrella

Un certain nombre de tâches Ecto mix fonctionnent au niveau supérieur d'une application parapluie. Les fichiers seeds.exs peuvent-ils être exécutés au niveau supérieur de l'application parapluie ? J'aimerais ajouter le fichier mix ecto.reset alias du parapluie. Je peux exécuter la commande drop , create y migrate tâche. Mais je n'arrive pas à comprendre comment exécuter le fichier de semences de chaque application.

J'aimerais savoir comment les autres résolvent ce problème.

0voto

Mike Buhot Points 3359

Une tâche récursive personnalisée pourrait fonctionner

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

0voto

nbap Points 76

Je sais que ce fil est ancien mais j'ai eu besoin de faire cela plus tôt dans la journée et j'ai trouvé une petite solution qui pourrait aider d'autres personnes ayant le même problème.

La réponse de Mike Buhot est bonne mais je ne voulais pas créer une tâche ou un module et je voulais aussi utiliser le fichier seeds.exs qui était présent dans le dossier priv de premier niveau. Il suffit d'ajouter l'extrait suivant à votre fichier seeds.exs de niveau supérieur et il exécutera toutes les graines que vous pouvez avoir à travers vos applications umbrella.

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)

Puis courir $ mix run priv/repo/seeds.exs fera l'affaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X