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 mix
and running scraperMix.Tasks.Example.run([])
works and returns:ok
atom - Running task like
mix example
raise:
** (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?