簡體   English   中英

如何在mix.exs中運行兩次別名?

[英]How to alias run twice in mix.exs?

我正在嘗試運行兩個不同的腳本,v1_to_v2_migrator.exs和update_images.exs

defp aliases do
  ["ecto.reset": ["ecto.drop", "ecto.create", "ecto.migrate", "run priv/repo/v1_to_v2_migrator.exs", "run priv/repo/update_images.exs"]

只運行第一個文件。 我試圖重新啟用run但我無法逃避文件名。

"run 'priv/repo/v1_to_v2_migrator.exs'; run -e 'Mix.Task.reenable(:run)'"

給出了這個錯誤:

** (Mix) No such file: priv/repo/v1_to_v2_migrator.exs;

文件結尾處包含分號的位置。

您可以使用Mix.Task.rerun/2來調用mix run兩次,如下所示:

["ecto.reset": [
  "ecto.drop",
  "ecto.create",
  "ecto.migrate",
  ~s|run -e 'Mix.Task.rerun("run", ["priv/repo/v1_to_v2_migrator.exs"]); Mix.Task.rerun("run", ["priv/repo/update_images.exs"])'|]]

對於您的特定示例,您可以傳遞多個文件來運行:

mix run -r priv/repo/foo.exs -r priv/repo/bar.exs

但如果問題是如何重新啟用任務,那么@ Dogbert和@ mudasobwa的方法是正確的。

雖然@Dogbert的回答可行,但我建議你采取不同的方法。 當您發現自己堅持使用該工具提供的功能時,通常意味着需要更改范例。

與許多其他構建工具不同, mix歡迎創建任務。 它比執行多個腳本更簡單,更直接,更慣用。 只需使用以下腳手架在lib/mix/tasks目錄中創建一個文件,比如my_awesome_task.ex (創建目錄,除非它已經存在):

defmodule Mix.Tasks.MyAwesomeTask do
  use Mix.Task

  @shortdoc "Migrates v1 to v2 and updates images"

  @doc false
  def run(args \\ []) do
    # it’s better to implement stuff explicitly,
    #   but this is also fine
    Mix.Tasks.Run.run(["priv/repo/v1_to_v2_migrator.exs"])
    Mix.Tasks.Run.rerun(["priv/repo/update_images.exs"])
  end
end

現在您只需要在mix.exs調用此任務:

["ecto.reset": ~w|ecto.drop ecto.create ecto.migrate my_awesome_task|]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM