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(使用前将#替换为@)