启动混合任务流程依赖项

2024-05-01

Elixir 新手,但到目前为止很喜欢它:)

我的很多混音任务都依赖于 HTTPotion。

My mix.exs文件被声明为这样

  def application do
    [
      applications: [:logger, :cowboy, :plug, :httpotion, :poison],
      mod: {BiddingAgent, []}
    ]
  end

所以 HTTPotion.start 会被自动调用。但是,当我运行类似的任务时mix campaign.list需要调用http请求,我必须手动调用HTTPotion.start.

确保为我的混合任务启动正确流程的惯用方法是什么?

Thanks!


你是对的,在启动脚本之外启动应用程序时,您确实需要手动启动依赖项。

我更喜欢打电话给Application模块而不是直接每个依赖项。

将以下代码添加到run在您的任务模块中运行。

{:ok, _started} = Application.ensure_all_started(:httpotion)

如果您有任何疑问,您可以查看文档 http://elixir-lang.org/docs/stable/elixir/Application.html#ensure_all_started/2

编辑: 所描述的做法正在 Ecto 中使用

  • https://github.com/elixir-lang/ecto/blob/master/lib/mix/ecto.ex#L73 https://github.com/elixir-lang/ecto/blob/master/lib/mix/ecto.ex#L73

  • https://github.com/elixir-lang/ecto/blob/df13b1c64f8edd128cec1316336b20f3153eafa3/lib/mix/tasks/ecto.migrate.ex#L67 https://github.com/elixir-lang/ecto/blob/df13b1c64f8edd128cec1316336b20f3153eafa3/lib/mix/tasks/ecto.migrate.ex#L67

mix 任务中包含一个模块,它提供了 Ensure_started 方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

启动混合任务流程依赖项 的相关文章

随机推荐