Size: a a a

2020 May 12

DR

Dmitry Russ (Aleksan... in pro.elixir
Lama Lover
Там же коллбек code_change имплементится в use GenServer
Я вчера рассказывал
Он не вызывается при обычной перегрузке кода. Чтобы code_change вызывался ( или config_change у application ) - нужен дополнительный код, например как в release handler, но ни recompile, ни phoenix codereloader его не вызывают.

Ну и в релизах он хитрее работает - он через sys протокол посылает перед обновлением кода всем GenServer-ам сообщение, чтобы они остановились работать (suspend и resume процессов) - обновляет код и посылает сообщение, что можно продолжать.
источник

DR

Dmitry Russ (Aleksan... in pro.elixir
Nikita Babushkin
recompile в iex зовёт code change? Не знал
Не вызывает.
источник

LL

Lama Lover in pro.elixir
Проверил, и правда
источник

NB

Nikita Babushkin in pro.elixir
Мне казалось, что горячий релоад "отменили" с приходом микси релизов. Его всё еще можно, но даже в доке писали вроде про что-то вроде того, что у вас все равно контейнеры с rolling update и вам это почти никогда не нужно
источник

NB

Nikita Babushkin in pro.elixir
Ну и по моему скромному мнению, гораздо важнее не потерять холодный старт, чем уметь в горячий апгрейд. Ведь когда у тебя после 2 лет обновлений стейтов случайно случится рестарт, то мы можешь и не подняться вовсе
источник

DR

Dmitry Russ (Aleksan... in pro.elixir
На мой субьективный взгляд, что там где code reload в production-е приносит пользу и нужен - его стоит написать самому (и везде я видел именно самописную реализацию), потому что встроенная в release handler в Erlang-е очень opionated (не знаю как правильно перевести это слово) версия и мало кому в таком виде подходит.
источник

DR

Dmitry Russ (Aleksan... in pro.elixir
Nikita Babushkin
Ну и по моему скромному мнению, гораздо важнее не потерять холодный старт, чем уметь в горячий апгрейд. Ведь когда у тебя после 2 лет обновлений стейтов случайно случится рестарт, то мы можешь и не подняться вовсе
Насколько я видел… Есть те, кому это нужно и есть те, где пользуются по фану, потому что могут. И те и другие почти как звери из красной книги, встречаются очень и очень редко. А в общем, согласен, моё скромное мнение такое же.
источник

IK

Ihor Katkov in pro.elixir
источник

AB

Alex Bubnov in pro.elixir
> while some languages have if, case, try and so on as language keywords, each with its own rules in the parser, in Elixir they are just macros

> elixir/lib/kernel/special_forms.ex
> defmacro case(condition, clauses), do: error!([condition, clauses])
> defmacro try(args), do: error!([args])

обожаю маркетинговый буллщит
источник

AB

Alex Bubnov in pro.elixir
>  and the Access protocol
ах эти прекрасные времена
источник

DZ

Dmitry Z in pro.elixir
Vladimir Sekisov
наверное что-то типа такого, правда придется поля явно перечислить:
q = from bcs in "banner_channel_status", select: %{rn: over(rank(), partition_by: [bcs.channel_id, bcs.banner_id], order_by: [desc: bcs.status_updated_at])}

q1 = from q in subquery(q) , select: q.rn

Repo.to_sql(:all, q1)
# => {"SELECT s0.\"rn\" FROM (SELECT rank() OVER (PARTITION BY b0.\"channel_id\", b0.\"banner_id\" ORDER BY b0.\"status_updated_at\" DESC) AS \"rn\" FROM \"banner_channel_status\" AS b0) AS s0",
[]}
не, так не работает, из-за наличия в выборке поля rn экто не может сконвертить запись в схему
вот такой вариант еще пробовал, тоже не работает
    
sub = from bc in query, select: [over(rank(), partition_by: [bc.channel_id, bc.banner_id], order_by: [desc: bc.status_updated_at]), bc]

from [rank, bc] in subquery(sub) , select: bc
источник

AB

Alex Bubnov in pro.elixir
простое любопытство - никто не в курсе, почему в if Kernel.in не экспандится, а просто в блоке - экспандится?
источник

VS

Vladimir Sekisov in pro.elixir
Dmitry Z
не, так не работает, из-за наличия в выборке поля rn экто не может сконвертить запись в схему
вот такой вариант еще пробовал, тоже не работает
    
sub = from bc in query, select: [over(rank(), partition_by: [bc.channel_id, bc.banner_id], order_by: [desc: bc.status_updated_at]), bc]

from [rank, bc] in subquery(sub) , select: bc
там, где %{rn:...} вам также надо заалиасить все поля, которые будете выбирать,
может и есть способ вставить одновременно в выборку
поле и wildcard '.*' или объект в Ecto, но я его не знаю
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Alex Bubnov
> while some languages have if, case, try and so on as language keywords, each with its own rules in the parser, in Elixir they are just macros

> elixir/lib/kernel/special_forms.ex
> defmacro case(condition, clauses), do: error!([condition, clauses])
> defmacro try(args), do: error!([args])

обожаю маркетинговый буллщит
Ты не туда смотришь же
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Это просто дока
источник

AB

Alex Bubnov in pro.elixir
Źmićer Rubinštejn
Ты не туда смотришь же
я знаю.
источник

DZ

Dmitry Z in pro.elixir
Vladimir Sekisov
там, где %{rn:...} вам также надо заалиасить все поля, которые будете выбирать,
может и есть способ вставить одновременно в выборку
поле и wildcard '.*' или объект в Ecto, но я его не знаю
да, я заалиасил все поля, осталась проблема в наличии поля rn в записи
источник

AB

Alex Bubnov in pro.elixir
я знаю, что case и try реализованы в эрланговом компиляторе.
источник

DR

Dmitry Russ (Aleksan... in pro.elixir
Alex Bubnov
> while some languages have if, case, try and so on as language keywords, each with its own rules in the parser, in Elixir they are just macros

> elixir/lib/kernel/special_forms.ex
> defmacro case(condition, clauses), do: error!([condition, clauses])
> defmacro try(args), do: error!([args])

обожаю маркетинговый буллщит
Неправильные примеры, а так-то правильно: if/unless/cond как примеры приводить стоило бы.
источник

AB

Alex Bubnov in pro.elixir
Dmitry Russ (Aleksandrov)
Неправильные примеры, а так-то правильно: if/unless/cond как примеры приводить стоило бы.
cond тоже спецформа =)
источник