Dmitry
22.05.2018
13:00:55
Мы используем conform
Там для изменения конфигурации ничего не нужно перекомпилировать
Dmitry
22.05.2018
15:02:07
На сколько быстро работает process alive?
Дешевле каждый раз проверять это, или отлавливать исключения при пихании в умерший пид?
Google
Dmitry
22.05.2018
15:04:29
Или это вообще несущественно
Anatoliy Kovalchuk
22.05.2018
15:04:57
я думаю что не существенно, но с Process.alive? код будет более читаемый
Dmitry
22.05.2018
15:05:28
А там нету этих фишек, что если мэилбокс заполнен - то process alive ждет?
Как с обзервером и стейтом
Anatoliy Kovalchuk
22.05.2018
15:13:26
сам метод в эрланге https://github.com/erlang/otp/blob/759af43a8213f6c0b39a76ae062a89b726cd4c25/erts/emulator/test/nif_SUITE_data/nif_SUITE.c#L2361
и enif_is_process_alive https://github.com/erlang/otp/blob/759af43a8213f6c0b39a76ae062a89b726cd4c25/erts/emulator/beam/erl_nif.c#L1866
вроде ничего страшного не происходит
Dmitry
22.05.2018
15:16:59
Может так случится, что проверил что пид жив, пихнул в него сообщение, а он к тому времени умер уже все равно.
is_process_alive - выглядит как костыль для оптимизации в данном случае.
Yuri
23.05.2018
08:58:04
как в distillery одной командой сделать 2 релиза
Dmitry
23.05.2018
09:00:37
Зачем?
Yuri
23.05.2018
09:01:31
другой вопрос
distillery должен быть в сборке?
Google
Yuri
23.05.2018
09:01:55
чтобы потом использовать hot upgrade?
Dmitry
23.05.2018
09:09:00
Нет
Есть здесь кто-нибудь, кто скучает по типизации в Elixir-е?
Anatoliy Kovalchuk
23.05.2018
14:52:16
было бы не плохо в некоторых случаях
Alexander
23.05.2018
14:52:23
я скучаю по типизации везде
вот только сегодня занимался grep-oriented refactoring, потратил пару часов на то, на что в хаскеле ушла бы одна минута
(рефакторил ерланг, но одна фигня)
Dmitry
23.05.2018
14:54:24
Dmitry
23.05.2018
15:01:13
https://github.com/skirino/croma Есть интересная библиотека
https://github.com/skirino/croma#cromadefun--typespec-oriented-function-definition
Dmitry
23.05.2018
15:01:49
Да вроде диализер норм торабатывает
Dmitry
23.05.2018
15:03:09
Которая добавляет сахара typespec-ам и добавляет, что очень удобно еще runtime проверку на входящие, выходящие данные из функции, что удобно вовремя разработки. Может, кому-то понравится ?
Alex
23.05.2018
15:11:05
Alexey
23.05.2018
15:19:01
https://github.com/expede/algae
Alex
23.05.2018
15:21:33
а кто-нибудь эрланговым diameter в эликсире пользовался?
Yury
23.05.2018
15:31:03
Я пробовал немного diameter+elixir
даже вот такую штуку делал чтобы словари собирать https://github.com/xerions/mix_dia_compiler но это было два года назад
Alex
23.05.2018
15:44:29
вот в нее я и смотрю, да
она ничего не делает
Yury
23.05.2018
15:46:19
https://github.com/surik/elixir_diameter_example
Google
Yury
23.05.2018
15:46:48
2 года назад было может и поломалось что
Artem
23.05.2018
16:29:50
готовят))
https://pragprog.com/book/phoenix14/programming-phoenix-1-4
Yuri
24.05.2018
11:30:37
кто может подсказать как писать кастомные таски в рут директории в umbrella проекте
Никита
24.05.2018
11:34:02
также как и в обычном
Yuri
24.05.2018
12:09:19
** (Mix) The task "deploy" could not be found
def project do
[
app: :app,
apps_path: "apps",
elixir: "~> 1.6",
elixirc_paths: ["lib"],
start_permanent: Mix.env() == :prod,
aliases: aliases(),
deps: deps()
]
end
у меня не видит таски которые лежат в lib/mix/tasks
если определен ключ :apps_path
Никита
24.05.2018
12:19:13
а ниже чо в алиасах
"test.reset": &reset_test/1
]
end
defp reset_test(_) do
Mix.Tasks.Cmd.run([
"MIX_ENV=test mix do ecto.drop, ecto.create, ecto.migrate;"
])
end
у нас вот так - последний алиас и функция
Yuri
24.05.2018
12:36:02
ну а как свою таску новую создать
общую
Anatoliy Kovalchuk
24.05.2018
12:36:15
а как создаешь,
пример
./lib/mix/tasks/ssl.ex
defmodule Mix.Tasks.Ssl do
use Mix.Task
@doc """
Create SSL certificates before starting Phoenix server.
"""
def run(domain) do
IO.puts "running for #{domain} domain"
end
end
mix ssl domain - запускается так
Yuri
24.05.2018
12:44:40
если я создаю в папке lib в рутовом mix проекте он не видит файлы с тасками, если убрать :apps_path видит, но тогда не видит приложения
Anatoliy Kovalchuk
24.05.2018
12:48:02
тогда придется выбрать umbrella приложение или нет
Yuri
24.05.2018
12:48:26
я придумал, сделал папку с тасками в папке apps
так видит
Google
Dmitry
24.05.2018
17:31:22
Так, ребята.
Все осилили статью про конфиги?
Артем
24.05.2018
17:31:41
я нет
но хотел бы
Dmitry
24.05.2018
17:31:47
Что насчёт запилить таки библиотеку для нормальной конфигурации всего и вся
Что-то скрученное между viper и conform
И попробовать пропихнуть в эликсир
Потому что конфиг по идее запускается раньше чем либы компилируются и надо подменять собой Mix config
Dmitry
24.05.2018
17:35:11
Зачем до компиляции?
Vladimir
24.05.2018
17:35:26
Забавно, но я для эрланга что-то похожее пишу, в процессе работы над другим проектом. Оно как-то само немного похоже на то, что в статье, получилось. :)
Но статья занятная, учту.
Dmitry
24.05.2018
17:39:27
Надо все кейсы учитывать
Некоторые конфиги идут в ход во время компиляции
Dmitry
24.05.2018
17:40:42
Их можно оставить mix config-гурации.
Администраторы получают обычно(точнее всегда, не видел пока исключений) уже скомпилированный продукт и там нужна конфигурация.
Которую могут не только эликсироводы читать и которая нужно собственно в runtime.
Ни viper, ни conform не решают задачу конфигурации до компиляции, потому что не для этого они применяются.
Marsel
24.05.2018
17:52:05
А что за статья?
Эта?
@artem_pankov @Virviil
а вот и решения для elixir по env
http://www.theerlangelist.com/article/rethinking_app_env
Yuri
24.05.2018
18:05:26
мне нравится идея шифровать файл конфига с ключами как в рельсе последней, чтобы можно было в гите ключики хранить
Google
Yury
24.05.2018
18:50:57
а кроме conform ничего больше нет в elixir?
Артем
24.05.2018
19:07:36
посоны
странный вопрос
допустим, я использую jwt токены и по некоторым соображениям храню их в базе с https://github.com/ueberauth/guardian_db/blob/master/lib/guardian/db/token.ex
какой оптимальный способ вы бы выбрали для добавления к этой таблице ещё нескольких полей?
Никита
24.05.2018
19:08:49
ну вот морочился с похожей историей
у меня оптимальный вариант был - создать другую таблицу
и связать ее с этой гардиандбшной
ибо поправить схему гардиан_дб тогда я чо та так и ниасилил)
Артем
24.05.2018
19:10:12
геморно, не? тут праймари кей jti+aud
надо следить за вставкой в эту таблицу, за её очисткой
Никита
24.05.2018
19:10:52
геморойно было схему ее править, ибо она нестандартная и глубоко запрятана
пусть работает лучше как работает
я сделал другую и внешний ключ набросил на токен
если токен удаляется то и моя запись удаляется из моей таблицы
просто при создании нового токена в колбэках гардиана создавай запись в своей таблице
а внешний ключ поможет тебе вовремя из твоей таблицы данные удалять
Артем
24.05.2018
19:12:05
да я понимаю. наверно это самый "правильный вариант"
чистить-то можно и на хуке ревока, в принципе, надеюсь, свипер его вызывает =)
Dmitry
24.05.2018
19:12:51
Не надо лезть во внутренности гуардиана, потом обновляться замучаешься
Артем
24.05.2018
19:14:01
def purge_expired_tokens do
timestamp = Guardian.timestamp()
query_schema()
|> where([token], token.exp < ^timestamp)
|> Guardian.DB.repo().delete_all(prefix: prefix())
end
Никита
24.05.2018
19:14:03
поддерживаю