Size: a a a

2020 July 23

a

arikai in pro.elixir
Поддержка от третьей стороны
источник

a

arikai in pro.elixir
Если ты добавляешь говно мамонта, которое никто не мейнтейнит, а потом оказывается, что он не доработан и/или есть баги, никому от этого лучше не будет
источник

a

arikai in pro.elixir
Будешь писать патчи? Ок, вариант. Только с нормальным мейнтейном с высокой вероятностью они бы уже были в мастере
источник

S

S in pro.elixir
Здравствуйте, я новичок в Elixir. Подскажите по naming convention, называть boolean колонки в Ecto лучше is_active или active?
источник

A

Azat in pro.elixir
назови лучше колонку "status" и держи там значения "active", "inactive"
источник

A

Azat in pro.elixir
в будущем вдруг захочется еще что то добавить, например "disabled", будет просто
источник

D

D in pro.elixir
подскажите пожалуйста как такое может быть?

1) есть главный процесс в фениксе, он запускает генсервер (FormWorker), который работает под DynamicSupervisor, и запускает WebSockex.start_link
2) затем главный процесс делает FormWorker.call(...), который под капотом дергает в третьем модуле Websockex.send_frame, и он уже отваливается по timeout

pid1 - phoenix request
pid2 - DynamicSupervisor.start_child(FormWorker, child_spec)
pid3 - модуль который использует WebSockex

сначала pid3  отваливается с (EXIT) time out
потом по цепочке в pid2 происходит (EXIT) time out
и в конце умирает процесс феникса pid1

при выходе дочернего процесса (pid2) главный процесс (pid1) же не должен крашиться если pid2 запущен под DynamicSupervisor?

лог феникса:

14:11:56.233 [error] #PID<0.3587.0> running TechMateWeb.Endpoint (connection #PID<0.3586.0>, stream id 1) terminated

Request: POST /forms
** (exit) exited in: GenServer.call(#PID<0.3589.0>, {:request, :full}, 5000)
   ** (EXIT) time out
14:11:57.918 [error] GenServer #PID<0.3589.0> terminating
** (stop) exited in: WebSockex.call(#PID<0.3593.0>, {:text, "{\"eof\" : 1}"})
   ** (EXIT) time out
   (websockex 0.4.2) lib/websockex.ex:431: WebSockex.send_frame/2
   (tech_mate 0.1.1) lib/tech_mate/workflow/form_worker.ex:91: TechMate.Workflow.FormWorker.start_request/4
   (tech_mate 0.1.1) lib/tech_mate/workflow/form_worker.ex:25: TechMate.Workflow.FormWorker.handle_call/3
   (stdlib 3.12.1) gen_server.erl:661: :gen_server.try_handle_call/4
   (stdlib 3.12.1) gen_server.erl:690: :gen_server.handle_msg/6
   (stdlib 3.12.1) proc_lib.erl:249: :proc_lib.init_p_do_apply/3
источник

VS

Vladimir Sekisov in pro.elixir
pid1 у вас отваливается из-за таймаута GenServer.call,
тк этот вызов заканчивается exit(timeout), если ответ не пришел
источник

D

D in pro.elixir
Vladimir Sekisov
pid1 у вас отваливается из-за таймаута GenServer.call,
тк этот вызов заканчивается exit(timeout), если ответ не пришел
То есть dynamic supervisor не может спасти в случае таймаута генсервера? Как тогда обработать эту ситуацию чтобы pid1 не падал?
источник

D

D in pro.elixir
Сейчас я в pid2 просто делаю try catch на :exit pid3 - костыльно но работает
источник

МБ

Максим Барулин... in pro.elixir
Process.trap_exit true
источник

AD

Anastasiya Dyachenko in pro.elixir
можно проверять перед call существует ли pid
источник

D

D in pro.elixir
Anastasiya Dyachenko
можно проверять перед call существует ли pid
Pid 3 существует всегда перед вызовом, а потом он падает и за ним падает pid2 вследствие таймаута своего же call
источник

D

D in pro.elixir
Максим Барулин
Process.trap_exit true
Process.flag trap_exit: true делаю в ините pid2 - это не помогает handle_info :EXIT не отлавливает выход по таймауту pid3
источник

D

D in pro.elixir
Но отлавливает все остальные причины выхода
источник

МБ

Максим Барулин... in pro.elixir
Некрофилия пошла
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Открыл после работы чат - а тут про наркотики
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Шозанах?
источник

D

D in pro.elixir
D
То есть dynamic supervisor не может спасти в случае таймаута генсервера? Как тогда обработать эту ситуацию чтобы pid1 не падал?
Все-таки есть какая либо стандартная практика обработки таймаута call генсервера или тут нормально с try catch?
источник

D

D in pro.elixir
Гугл что-то ничего дельного не предлагает
источник