
Den
20.01.2018
18:57:58
Привет всем
А есть ли у ecto возможность генерировать миграции на основе diff’a моделек и бд?
Нашел такой пэкэдж
https://github.com/xerions/ecto_migrate

Alexander
21.01.2018
09:06:14
ой, на 20.2 то есть

Google

Alexander
21.01.2018
09:07:01
вообще на 20.x ветке проблем не помню

Evgeny
21.01.2018
09:07:30
Возможно там проблемы возникают в определенных случаях, которые у вас просто не наступают
Вы на сообщения при компиляции феникса смотрели?

Alexander
21.01.2018
09:14:35
варнинг есть, но проблем никаких нет, аплоады мультипартом работают
а вот со strong_rand_bytes были определенные траблы у народа ?
https://github.com/elixir-plug/plug/issues/629

Evgeny
21.01.2018
13:27:09
А можно в эликсире создавать алиасы модулей? Грубо говоря, чтобы у одного модуля было несколько имен.
ага, внутри модуля можно обычным alias
а в глобальной области видимости можно?
впрочем вопрос снят, похоже в любом lexical scope можно

Артем
21.01.2018
16:39:36
всем привет. есть вопрос по пулам процессов. есть пулбой, но он говорит, что к его процессам нельзя делать cast, только call. на мой взгляд это несколько уменьшает его полезность, т.к. вызывающий процесс блокируется. есть какие-то альтернативые кроме как сделать велосипед?
задача очень простая - слушать вебсокет и раскидывать парсинг данных с него по пулу процессов
соответственно, исходный процесс хотелось бы иметь один

Google

Evegeniy
21.01.2018
16:41:03
например сделать еще 1 процесс, который будет общаться с твоим пуллом
ты делаешь call, он отвечает и потом через какое-то время асинхронно вызывающему процессу что-то возвращает
P1 cast/call->> Proxy-процесс, который общается с пулом cast->> PoolBoy
лично мне такое решение пришло, думаю кто-то может что-то более вразумительное порекомендовать

Артем
21.01.2018
16:43:07
а как это поможет? прокси процесс будет залипать в ожидании ответа от процесса из пулбоя

Evegeniy
21.01.2018
16:43:33
ты пишешь, что у тебя основная проблема в том, что вызывающей процесс блокируется
он и не будет блокироваться

Артем
21.01.2018
16:43:47
неправильно сформулировал
ключевое, что нужно - обеспечить реально параллельную обработку сообщений из вёбсокета. то есть я хочу, чтобы был пул из 5 процессов, которые одновременно переваривали бы до 5 сообщений
с пулбоем, похоже, предполагается, что вызывающих процессов для этого должно быть тоже 5

Evegeniy
21.01.2018
16:47:41
да вообще нет
ты же можешь зачекаутить из пулла сразу 5 воркеров

Артем
21.01.2018
16:49:20
ну вот я не понимаю, как можно асинхронно, не дожидаясь возврата сообщения, запустить воркер пулбоя. без него для этого можно использовать каст
в его доке говорится каст нельзя юзайте колл

Evegeniy
21.01.2018
16:52:00
я заранее извиняюсь, может я тупулю очень сильно, потому что не профи, но по-идее ты можешь сделать как-то так
Worker1 = poolboy:checkout(PoolName).
Worker2 = poolboy:checkout(PoolName).
…
genServer.cast(Worker1, Request).
для эрланга точно так валидно
и потом вернуть их в пул
поправь пожалуйста, меня, если так невозможно
да, синтаксис в моем ответе выше — что-то вроде псевдо кода на эрлангксире ?

Google

Артем
21.01.2018
16:55:00
http://blog.elixirsips.com/2014/07/16/errata-dont-use-cast-in-a-poolboy-transaction/

Evegeniy
21.01.2018
16:55:11
2014
это раз

Артем
21.01.2018
16:55:38
ну у меня это точно так же не работало на тестовом инсталле две недели назад)))

Evegeniy
21.01.2018
16:55:41
второе, если очень хочется — тебе же так никто не запрещает сделать
тогда не знаю ?

Артем
21.01.2018
16:56:03
то есть вызывался всегда первый процесс из пула, хотя он был занят

Evegeniy
21.01.2018
16:56:05
в чем тогда проблема прокси-процесс сделать?
не не
ты зачекаутишь же
конкретный процесс

Артем
21.01.2018
16:58:02
ну типа для этого внутри них нужно вставлять какую-нибудь сигнализацию, что он свободен, иначе как знать, какой чекаутить

Evegeniy
21.01.2018
17:00:14
В книге Learn You Some erlang
в 18 главне
описывается пример построения своего простейшего пула
и там эта штука есть
в смысле, может тебе идея оттуда поможет
у него просто есть отдельный процесс, который смотрит, свободны воркеры или нет
если нет, кладет сообщения в очередь
мне кажется, пулбой или другой пул должен примерно также уметь

Google

Evegeniy
21.01.2018
17:01:45
но опять же, я не супер-опытный с эрлангом/эликсиром

Артем
21.01.2018
17:01:55
https://medium.com/pharos-production/process-registry-one-node-pool-c3a56f0f199f
ну я читал сегодня статью, собрать такое не особо сложно-то да
я к сожалению тоже без избыточного опыта)))
я прям не знаю
может посмотреть в сторону какой-либо реализации очередей
то есть процесс с веб-сервером будет класть что-то в очередь
а 5 воркеров пытаться из неё извлекать
чтобы не городить мониторинг процессов

Evegeniy
21.01.2018
17:11:13
http://learnyousomeerlang.com/building-applications-with-otp#a-pool-of-processes
вот в книжке Хеберт делает нечто подобное тому, что тебе нужно
https://github.com/koudelka/honeydew
10 секунд гугления помогли мне найти вот это
похоже на то, что тебе нужно

Артем
21.01.2018
17:34:08
Надо посмотреть быстро ли оно данные из очереди извлекает
https://github.com/sheharyarn/que
вот даже пободрее вариантик

Dmitry
21.01.2018
18:27:55
GenStage же

Google

Alexey
21.01.2018
20:38:26
кстати, в доке по GenStage говорится, что если просто надо распараллелить, то лучше взять Task.async_stream/2 - у него есть опция max_concurrency, которая ограничит кол-во одновременно работающих тасков

Alexey
21.01.2018
20:40:21
да. я сравнивал на своих тестах каких-то. async получился быстрее, чем flow

Alexey
21.01.2018
20:40:25
я использовал poolboy, потому что у каждого воркера был сложный state и было немного накладно для каждого запроса инициализировать этой state заново

Артем
22.01.2018
05:43:53
GenStage же
а вот это реально похоже на то, что можно попробовать, спасибо

Alisa
22.01.2018
10:08:18
так что в итоге, в эликсире действительно удобно в параллельность или это маркетинговый булщит и в других языках гемора не меньше?

Alexey
22.01.2018
10:15:38
в параллельность удобно. но это потому, что многие задачи в ерланг решаются вообще иначе

Aldar
22.01.2018
10:16:39
Точнее не сложно, а сложней чем в том же руби

Alex
22.01.2018
10:25:59