Maxximiliann
(ArgumentError) argument error (stdlib) :ets.lookup_element(:hackney_config, :mod_metrics, 2)
(Please note: Elixir Experience Level: Beginner)
** (ArgumentError) argument error
(stdlib) :ets.lookup_element(:hackney_config, :mod_metrics, 2)
/home/maxximiliann/arbit/deps/hackney/src/hackney_metrics.erl:27: :hackney_metrics.get_engine/0
/home/maxximiliann/arbit/deps/hackney/src/hackney_connect.erl:78: :hackney_connect.create_connection/5
/home/maxximiliann/arbit/deps/hackney/src/hackney_connect.erl:47: :hackney_connect.connect/5
/home/maxximiliann/arbit/deps/hackney/src/hackney.erl:333: :hackney.request/5
lib/httpoison/base.ex:793: HTTPoison.Base.request/6
lib/pump.ex:11: Pump.get_trading_activity/0
How do I resolve this error?
Thanks for all your help ![]()
Marked As Solved
dom
It looks fine. Try iex -S mix (or iex -S mix run) rather than iex -S mix compile.
mix run loads and runs your application and its dependencies, whereas mix compile only compiles the application without starting it. You’ll see the difference if you call Application.started_applications() in your iex shell after starting it.
Also Liked
axelson
No, using :extra_applications like what you are using is what I would recommend.
Ah, I see what’s happening. Normally I’d let Application.ensure_all_started(:faithful_word) start all of the dependencies of your application. But since you’re starting all the dependencies manually you have to add any transitive dependencies (i.e. dependencies of your dependencies) as well.
dom
Erlang/Elixir libraries are packaged as applications, with start and stop functions responsible for initializing or tearing down everything the app needs to run: supervision tree, registered processes, ETS tables, etc.
In this case the missing resource is an ETS table which Hackney creates when it starts:
https://github.com/benoitc/hackney/blob/1.15.2/src/hackney_app.erl#L21
https://github.com/benoitc/hackney/blob/1.15.2/src/hackney_sup.erl#L40
Most likely you can fix it by ensuring Hackney is started. In mix.exs, how did you specify the dependency? Make sure it doesn’t have a flag like runtime: false or only: :test.
If you’re on an old Elixir, you may also have to add it under applications, which controls what applications (dependencies) get started before your app. More modern Elixir uses extra_applications instead and generally figure out dependencies automatically.
If you didn’t specify Hackney as a dependency at all - then perhaps it got brought in indirectly by HTTPoison. Then you need to make sure that HTTPoison is being started instead, which should automatically start Hackney.
There’s some more discussion on that in the tutorial: https://elixir-lang.org/getting-started/mix-otp/supervisor-and-application.html#the-application-callback
maz
I encountered the same error when running integration changes on prod when initializing the meilisearch-elixir module. What was really odd was I wasn’t encountering this error stack on a separate project using the same module. So I’m assuming it was a race condition here:
faithful_word | ** (ArgumentError) errors were found at the given arguments:
faithful_word |
faithful_word | * 1st argument: the table identifier does not refer to an existing ETS table
faithful_word |
faithful_word | (stdlib 3.15.2) :ets.lookup_element(:hackney_config, :mod_metrics, 2)
faithful_word | /app/deps/hackney/src/hackney_metrics.erl:27: :hackney_metrics.get_engine/0
faithful_word | /app/deps/hackney/src/hackney_connect.erl:75: :hackney_connect.create_connection/5
faithful_word | /app/deps/hackney/src/hackney_connect.erl:44: :hackney_connect.connect/5
faithful_word | /app/deps/hackney/src/hackney.erl:335: :hackney.request/5
faithful_word | lib/httpoison/base.ex:846: HTTPoison.Base.request/6
faithful_word | lib/meilisearch/http.ex:40: Meilisearch.HTTP.delete_request/3
faithful_word | (stdlib 3.15.2) erl_eval.erl:685: :erl_eval.do_apply/6
The solution was quite similar, I had to ensure that :httpoison and :poison were started before launching:
defmodule FaithfulWord.ReleaseTasks do
@start_apps [
:crypto,
:ssl,
:postgrex,
:ecto,
:ecto_sql,
:httpoison, # add
:poison # add
]
...
defp start_services do
IO.puts("Starting dependencies..")
# Start apps necessary for executing migrations
Enum.each(@start_apps, &Application.ensure_all_started/1)
# Start the Repo(s) for app
IO.puts("Starting repos..")
Enum.each(@repos, & &1.start_link(pool_size: 2))
end
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance








