Максим
06.03.2018
08:58:03
для того, чтобы ловить события не попадающие в текущую стадию
делаю вызов TaskFsm.sendInfo(id, [task: "reset", msg: nil])
но в handle_event процесс не попадает
а пытается найти соответсвующую вызову finish
Google
Максим
06.03.2018
08:59:19
которой нет
и падает
Alex
06.03.2018
09:01:42
потому что у тебя должен быть определен catch-all finish/3, который вызывает handle_event
Максим
06.03.2018
09:02:03
о_О
Alex
06.03.2018
09:02:10
http://erlang.org/doc/design_principles/statem.html#id73802
Максим
06.03.2018
09:02:35
а если у меня там 10 шагов? мне 10 таких определять?
Alex
06.03.2018
09:02:54
ну, да
Dmitry
06.03.2018
09:02:56
Со state_functions - так, поэтому handle_event_function появился.
Alex
06.03.2018
09:03:00
можешь макрос запилить
Максим
06.03.2018
09:03:44
шляпа...
Alex
06.03.2018
09:04:45
типа, catch_all_states [:finish, :start, :pause], который генерит тебе форварды в handle_event/3
хотя проще, конечно, их руками написать
Google
Alex
06.03.2018
09:05:41
и если у тебя fsm на 10 стейтов, я тебе искренне сочувствую
Dmitry
06.03.2018
09:05:51
Такую фичу лучше сразу на уровне контрибьюта в библиотеку делать.
Максим
06.03.2018
09:06:50
с макросами у меня не очень, но придётся видать освоить, так как переписывать все на handle_event долго и как-то не очень
Dmitry
06.03.2018
09:07:13
Хотя event_function удобнее уже тем, что можно на разные состояния мэтчить, если одно и тоже действие для нескольких стейтов нужно сделать.
Максим
06.03.2018
09:07:53
угу, следующие на нём запилю, останется что-то придумать с текущими...
Dmitry
06.03.2018
09:21:45
Я домой вернусь, попробую кое-что.
Сделать с макросами.
Alexander
06.03.2018
12:08:29
Ребят, вопрос:
Кто-нибудь прикручивал в Elixir справочник адресов ФИАС или КЛАДР?
есть готовое решение?
Alex
06.03.2018
12:10:25
Артем
06.03.2018
12:24:25
Alex
06.03.2018
12:25:05
да и вообще это не важно
сохраняются они или нет
и {:ok} тоже надо убрать
Evgeny
06.03.2018
12:33:59
Что за бред?
Supervisor.start_link(
[ worker(Cachex, [ :my_cache, [] ]) ]
)
Насколько я понимаю, это устаревший вариант запуска дочернего воркера. А как по-современному это переписать?
Dmitry
06.03.2018
12:34:47
{Cachex, [ :my_cache, []]}
- это если Cachex имплементирует child_spec-callback.
В мастере не поддерживает, так что пока не получится.
Evgeny
06.03.2018
12:36:46
и как эту жопу обойти?
вручную, короче сделать чайлд спек и пихнуть супервизору
Google
Evgeny
06.03.2018
12:37:56
идиотизм
Артем
06.03.2018
12:38:18
да и вообще это не важно
Как не важно, важно. В данном случае обработка отлично от интересующего результата высосана из пальца
То есть ты дописал код в котором нет ценности
Он не делает ничего полезного
Наоборот он заставляет думать что что-то в случае элс произойдет
А это не так
То есть помимо своей бесполезности он еще и вводит в заблуждение
Alex
06.03.2018
12:40:50
че пристали с этим else
Alex
06.03.2018
13:00:06
Evgeny
06.03.2018
13:04:02
типа культурное "зажрались"?
ну на самом деле устарело это хз когда, но никто так и не удосужился сделать нормальный child_spec
я бы сам сделал, но недостаточно компетентен
Dmitry
06.03.2018
13:36:32
ГенСерверу при инициализации можно задать значение, которое будет константным между вызовами?
Andrey
06.03.2018
13:41:51
можно пример, а то не очень понятен вопрос в принципе?
Yuri
06.03.2018
13:44:35
ребят подскажите нормальный HTTP client, чет httpoison со своим
hackney прям боль
Sergey
06.03.2018
14:03:35
Dmitry
06.03.2018
14:04:31
во, стейт кажется то что нужно
Google
Dmitry
06.03.2018
14:04:46
только я понимаю как он задается при старте, а как его потом доставать?
Sergey
06.03.2018
14:05:35
Andrey
06.03.2018
14:05:49
https://hexdocs.pm/elixir/GenServer.html#module-example
принципиально доку не читаем, да? вроде этот пример же про то что надо
при старте инициализируем, в хендлере вынимаем
Dmitry
06.03.2018
14:11:48
спасибо
Yuri
06.03.2018
14:25:08
отказываеться работать собака )
может сталкивался
14:22:31.973 [error] Task #PID<6862.2283.0> started from #PID<6862.2282.0> terminating
** (FunctionClauseError) no function clause matching in :hackney_url.transport_scheme/1
/var/www/app/edeliver_builds/deps/hackney/src/hackney_url.erl:109: :hackney_url.transport_scheme(:hackney_http_connect)
/var/www/app/edeliver_builds/deps/hackney/src/hackney.erl:859: :hackney.absolute_url/2
/var/www/app/edeliver_builds/deps/hackney/src/hackney.erl:712: :hackney.maybe_redirect/2
/var/www/app/edeliver_builds/deps/hackney/src/hackney.erl:362: :hackney.send_request/2
lib/httpoison/base.ex:439: HTTPoison.Base.request/9
lib/movie_web/release_tasks.ex:703: MovieWeb.ReleaseTasks.request/2
lib/movie_web/release_tasks.ex:142: anonymous fn/2 in MovieWeb.ReleaseTasks.import_movies/0
lib/ecto/adapters/sql.ex:576: anonymous fn/3 in Ecto.Adapters.SQL.do_transaction/3
Sergey
06.03.2018
14:32:26
Yuri
06.03.2018
14:33:22
Sergey
06.03.2018
14:35:20
гист скинь
чтобы было понятно, как ты его используешь
я использовал hackney и он работал
Yuri
06.03.2018
14:37:37
Marsel
06.03.2018
14:40:34
я у себя follow_redirect: false ставил, и руками смотрел есть ли редирект в ответе
Yuri
06.03.2018
14:42:38
урлов просто много) руками смотреть каждый не вариант
Marsel
06.03.2018
14:44:01
а как-то поймать можно если ест ьредирект?
case HTTPoison.request(:get, String.to_charlist(url), "", header, options) do
{:ok, %HTTPoison.Response{headers: resp_header, status_code: status_code}} when status_code > 300 and status_code < 400 ->
тут вытаскивает из хидеров location и идем по нему
как то так у меня
Google
Yuri
06.03.2018
14:45:56
как то так у меня
у меня значит чет не то
case HTTPoison.get(url, ["User-Agent": Enum.random(@user_agents)], [proxy: proxy, follow_redirect: true, ssl: [{:versions, [:'tlsv1.2']}] ])
Marsel
06.03.2018
14:46:27
follow_redirect: true же у тебя
Yuri
06.03.2018
14:47:05
попробую переписать, чтобы ловить редиректы, как в твоем примере
спасибо
Azat
06.03.2018
15:21:37
Я раньше тоже httpoison использовал, потом понял что юнит-тестить его сложновато и перешёл на tesla
ⰿⰰⰾⱏ
06.03.2018
15:26:09
Azat
06.03.2018
15:36:42
есть какбы отдельные клиент и сервер, общающиеся по джсон-апи, нужно было юнит-тестить клиент, я сделал сервер-заглушку на плаге, но такое решение было забраковано тим-лидом, потому что слушает tcp-порт, а на тесле получилось просто и без головной боли
Dmitry
06.03.2018
15:39:30
В любом случае ты что-то мокаешь
В httpoison есть exvcr
Которым все пользуются и не имеют проблем
Самое крутое, что можно раз в неделю подкинуть реальный ключ и обновить кассеты
Даже если api связано с бабками