在混合文件中的别名内。如果我们这样定义迁移命令:
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
不能在这里工作,因为它不是自定义任务。
有什么方法可以覆盖它,以便两个命令都能执行?
答案 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"