Phoenix混合任务上的HTTPoison ArgumentError

时间:2019-05-02 05:50:13

标签: elixir httprequest phoenix-framework mix httpoison

我在phoenix应用程序(lib / mix / tasks / fetch.btc.ex)上有混合任务<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <h1>jQuery Effects</h1> <button>Click Me!</button> <hr> <div> <h2>One</h2> </div> <div> <h2>Two</h2> </div> <div> <h2>Three</h2> </div>

mix fetch.btc

运行defmodule Mix.Tasks.Fetch.Btc do use Mix.Task def run(_args) do res = HTTPoison.get!("https://blockchain.info/ticker") IO.inspect(res) end end 时出现错误:

mix fetch.btc

但是在我的控制器中,此代码** (ArgumentError) argument error (stdlib) :ets.lookup_element(:hackney_config, :mod_metrics, 2) PROJ_DIR/deps/hackney/src/hackney_metrics.erl:27: :hackney_metrics.get_engine/0 PROJ_DIR/deps/hackney/src/hackney_connect.erl:78: :hackney_connect.create_connection/5 PROJ_DIR/deps/hackney/src/hackney_connect.erl:47: :hackney_connect.connect/5 PROJ_DIR/deps/hackney/src/hackney.erl:330: :hackney.request/5 lib/httpoison/base.ex:787: HTTPoison.Base.request/6 lib/httpoison.ex:128: HTTPoison.request!/5 lib/mix/tasks/fetch.btc.ex:14: Mix.Tasks.Fetch.Btc.run/1 (mix) lib/mix/task.ex:331: Mix.Task.run_task/3 (mix) lib/mix/cli.ex:79: Mix.CLI.run_task/2 (elixir) lib/code.ex:767: Code.require_file/2 成功!

信息:

res = HTTPoison.get!("https://blockchain.info/ticker")
  1. 我在做什么错了?
  2. 在混合任务中发出http请求的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

应用程序及其所有依赖项已经启动时,控制器中的代码就会运行。 mix任务在:mix应用程序中运行,该应用程序显然默认情况下不会启动:hackney

您所需要做的就是确保它已启动/手动启动:

def run(_args) do
  # ⇓⇓⇓⇓⇓⇓⇓ THIS ⇓⇓⇓⇓⇓⇓⇓
  Application.ensure_all_started(:hackney)
  # ⇑⇑⇑⇑⇑⇑⇑ THIS ⇑⇑⇑⇑⇑⇑⇑

  res = HTTPoison.get!("https://blockchain.info/ticker")
  IO.inspect(res)
end

答案 1 :(得分:1)

您也可以在实际通话之前使用HTTPoison.start()。如果您不想每次都在混合文件中启动hackney应用程序,或者您不想开始使用Application,那也将起作用。