在混合文件中的别名内运行两次迁移命令

时间:2019-07-03 06:39:10

标签: elixir phoenix-framework mix

在混合文件中的别名内。如果我们这样定义迁移命令:

 defp aliases do
  [
    "ecto.migrate": [
      "ecto.migrate  data/priv/repo/migrations",
      "ecto.migrate --migrations-path apps/al/priv/repo/migrations"
     ]
  ]

如果我们运行mix ecto.migrate。仅执行第一个命令,然后忽略第二个命令。

我知道混合不允许两次执行相同的任务。而且我认为Mix.task.rerun or reenable不能在这里工作,因为它不是自定义任务。

有什么方法可以覆盖它,以便两个命令都能执行?

1 个答案:

答案 0 :(得分:0)

我不知道有什么方法可以从Mix.Project重新运行任务,但是您可以轻松创建自己的任务来满足自己的需求。

cat lib/mix/tasks/my_migrate.ex
defmodule Mix.Tasks.MyApp.MyMigrate do
  @shortdoc "Executes `ecto.migrate` several times for different paths"

  use Mix.Task

  @impl Mix.Task
  def run(paths) do
    Enum.each(paths, fn path ->
      Mix.shell().info("Executing Ecto.Migrate for path: " <> path)
      Mix.Tasks.Ecto.Migrate.run(migrations_path: path)
      Mix.Task.reenable(Mix.Tasks.Ecto.Migrate)
    end)
  end
end

并以

运行
mix my_app.my_migrate "data1/migrations" "data2/migrations"