像 Elixir Mix 任务中的依赖功能一样耙?
Rake like dependency functionality in Elixir Mix tasks?
在 Rake 中,可以指定任务之间的依赖关系。然后引擎构建一个依赖关系树并按照依赖关系的顺序执行这些任务,并且每个任务只执行一次。
在elixir/mix中是否有类似的机制?
task seed_users: [:seed_companies] do
# actions
end
task :seed_companies do
# actions
end
我认为这没有任何内置功能,但您可以使用 Mix.Task.run/2
来实现:
defmodule Mix.Tasks.SeedUsers do
def run(_args) do
IO.puts "started seed_users"
Mix.Task.run "seed_companies"
Mix.Task.run "seed_companies"
IO.puts "completed seed_users"
end
end
defmodule Mix.Tasks.SeedCompanies do
def run(_args) do
IO.puts "started seed_companies"
IO.puts "completed seed_companies"
end
end
示例运行:
$ mix seed_users
started seed_users
started seed_companies
completed seed_companies
completed seed_users
请注意,如果任务已经 运行 一次,那么 Mix.Task.run/2
不会 运行 任务,因此如果您调用 Mix.Task.run/2
两次,如上例所示,只有 运行 一次。如果您想多次 运行 一项任务,则需要在每 运行.
之后调用 Mix.Task.reenable/1
在 Rake 中,可以指定任务之间的依赖关系。然后引擎构建一个依赖关系树并按照依赖关系的顺序执行这些任务,并且每个任务只执行一次。
在elixir/mix中是否有类似的机制?
task seed_users: [:seed_companies] do
# actions
end
task :seed_companies do
# actions
end
我认为这没有任何内置功能,但您可以使用 Mix.Task.run/2
来实现:
defmodule Mix.Tasks.SeedUsers do
def run(_args) do
IO.puts "started seed_users"
Mix.Task.run "seed_companies"
Mix.Task.run "seed_companies"
IO.puts "completed seed_users"
end
end
defmodule Mix.Tasks.SeedCompanies do
def run(_args) do
IO.puts "started seed_companies"
IO.puts "completed seed_companies"
end
end
示例运行:
$ mix seed_users
started seed_users
started seed_companies
completed seed_companies
completed seed_users
请注意,如果任务已经 运行 一次,那么 Mix.Task.run/2
不会 运行 任务,因此如果您调用 Mix.Task.run/2
两次,如上例所示,只有 运行 一次。如果您想多次 运行 一项任务,则需要在每 运行.
Mix.Task.reenable/1