【问题标题】:How to alias run twice in mix.exs?如何在 mix.exs 中运行两次别名?
【发布时间】:2018-06-25 18:33:18
【问题描述】:

我正在尝试运行两个不同的脚本,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;

文件结尾包含分号的地方。

【问题讨论】:

    标签: elixir elixir-mix


    【解决方案1】:

    您可以像这样使用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"])'|]]
    

    【讨论】:

      【解决方案2】:

      对于您的特定示例,您可以传递多个文件来运行:

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

      但如果问题是一般如何重新启用任务,那么@Dogbert 和@mudasobwa 的方法是正确的。

      【讨论】:

        【解决方案3】:

        虽然@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|]
        

        【讨论】:

          猜你喜欢
          • 2020-12-15
          • 2016-02-22
          • 2020-06-29
          • 2019-11-13
          • 2018-06-25
          • 2013-04-23
          • 1970-01-01
          • 2016-08-19
          • 2015-04-25
          相关资源
          最近更新 更多