Eiji
Hound does not work in mix task from normal console
The problem
In our scraping project we need to use hound (for only one scraper) and we want to run all scrapers in it at same time (by flow dependency). Only one scraper (that works in console) fails when running scraper. I created a smallest example to reproduce my problem.
Environment
Elixir and Erlang versions (both installed by asdf):
elixir -v
Erlang/OTP 19 [erts-8.3.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]
Elixir 1.4.2
Deps tree:
mix deps.tree
example
└── hound ~> 1.0 (Hex package)
├── hackney ~> 1.5 (Hex package)
│ ├── certifi 1.2.1 (Hex package)
│ ├── idna 5.0.2 (Hex package)
│ │ └── unicode_util_compat 0.2.0 (Hex package)
│ ├── metrics 1.0.1 (Hex package)
│ ├── mimerl 1.0.2 (Hex package)
│ └── ssl_verify_fun 1.1.1 (Hex package)
└── poison >= 1.4.0 (Hex package)
Steps to reproduce:
1 create new project like: mix new example
2 add hound to dependencies and run mix deps.get
3 add to configuration: config :hound, driver: "phantomjs" (this is current configuration in our real project)
4 add mix task like:
defmodule Mix.Tasks.Example do
use Mix.Task
def run(_args) do
Hound.start_session
Hound.end_session
end
end
5 run phantomjs with --wd argument
6 run example task like: mix example
Current behavior:
- Running elixir console for current project
iex -S mixand running scraperMix.Tasks.Example.run([])works and returns:okatom - Running task like
mix exampleraise:
** (ArgumentError) argument error
(stdlib) :ets.lookup(Hound.SessionServer, #PID<0.71.0>)
lib/hound/session_server.ex:19: Hound.SessionServer.current_session_id/1
lib/hound/session_server.ex:13: Hound.SessionServer.session_for_pid/2
lib/mix/tasks/example.ex:5: Mix.Tasks.Example.run/1
(mix) lib/mix/task.ex:294: Mix.Task.run_task/3
(mix) lib/mix/cli.ex:58: Mix.CLI.run_task/2
Expected behavior:
In both cases (running task from iex and running task from normal console) should work and return :ok atom.
Am I forgot about something or it’s a bug in hound?
Marked As Solved
NobbZ
Your application is not started for tasks, if you need it started you have to do it yourself. iex -S mix does start your application, that’s why it works from there.
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








