Size: a a a

2020 July 07

SP

Sergey Prokhorov in ErlangRus
Я тут этим пользовался например https://github.com/seriyps/mtproto_proxy/blob/master/start.sh#L74-L99
источник

ИИ

Иванов Иванов... in ErlangRus
Sergey Prokhorov
а возможности менять application env при запуске не достаточно?
ну там и другие варианты есть. потому и вопрос - что и как хочется менять.  -extra, переопеределение app namespace, StartArgs как видишь тоже есть, замена -config
источник

ИИ

Иванов Иванов... in ErlangRus
Sergey Prokhorov
path/to/relx/generated/script -my_app my_env_key_name '{arbitrary, "erlang", <<"term">>}'
а зачем relx generated скрипт ? бесполезная лапша там..  от которой польза только поиск erts директории
источник

ML

Maksim Lapshin in ErlangRus
Я поясню зачем мне это.

Есть настройки, которые можно задать при компиляции, типа доступные протоколы ssl.

есть те, которые задаются при запуске и не особо меняются, например включить у dvr (видеоархив) логгирование всех запросов.

Вот как их передать при старте приложения? Можно в скрипте, который стартует все приложения, можно в start коллбеке приложения. В start коллбеке удобно: в тестах и слейв нодах не забудешь прописать настройку
источник

ИИ

Иванов Иванов... in ErlangRus
Maksim Lapshin
Я поясню зачем мне это.

Есть настройки, которые можно задать при компиляции, типа доступные протоколы ssl.

есть те, которые задаются при запуске и не особо меняются, например включить у dvr (видеоархив) логгирование всех запросов.

Вот как их передать при старте приложения? Можно в скрипте, который стартует все приложения, можно в start коллбеке приложения. В start коллбеке удобно: в тестах и слейв нодах не забудешь прописать настройку
я бы задавал -config  vm.config где есть секция {appname, ...}, а те параметры которые надо поменять из командной строки - переопределял бы в командной строке -<appname> <key> <value>. тогда вообще ничего по схеме otp менять не надо.
(для тестов -config отличный от релизного), ну а в app.src который - там вообще ничего не задавал бы.
источник

ИИ

Иванов Иванов... in ErlangRus
Maksim Lapshin
Я поясню зачем мне это.

Есть настройки, которые можно задать при компиляции, типа доступные протоколы ssl.

есть те, которые задаются при запуске и не особо меняются, например включить у dvr (видеоархив) логгирование всех запросов.

Вот как их передать при старте приложения? Можно в скрипте, который стартует все приложения, можно в start коллбеке приложения. В start коллбеке удобно: в тестах и слейв нодах не забудешь прописать настройку
соответсвенно в программе параметры брать только из application:get_env
источник

AK

Aleksey Kluchnikov in ErlangRus
Я делаю конф genserver который вычитывает 2 своих конффайла service.conf.default и service.conf. В файлах мапа конфига, которая мержится. То есть если что то есть в service.conf то оно переписывает то что есть в service.conf.default.  Все что передается через переменных окружения это путь до этих двух конфигов.
Ну и для тестов идет service.conf.test для стежа service.conf.stage и т.д.
источник

AK

Aleksey Kluchnikov in ErlangRus
И в этом генсервере решается что положить в персистент термс что просто в стейте остается
источник

AK

Aleksey Kluchnikov in ErlangRus
Заморочился с конвертором hex <-> bin, забирайте кому надо :)
bin_to_hex(Bin) -> << <<(integer_to_binary(N, 16))/binary>> || <<N:4>>  <= Bin>>.
hex_to_bin(Hex) -> << <<(binary_to_integer(<<X:16>>, 16))>> || <<X:16>> <= Hex>>.
источник

AK

Aleksey Kluchnikov in ErlangRus
ато в интернете все примеры некрасивые
источник

ИИ

Иванов Иванов... in ErlangRus
Aleksey Kluchnikov
Я делаю конф genserver который вычитывает 2 своих конффайла service.conf.default и service.conf. В файлах мапа конфига, которая мержится. То есть если что то есть в service.conf то оно переписывает то что есть в service.conf.default.  Все что передается через переменных окружения это путь до этих двух конфигов.
Ну и для тестов идет service.conf.test для стежа service.conf.stage и т.д.
А зачем им конфиги. application get env работает с бым appname.
источник

AK

Aleksey Kluchnikov in ErlangRus
конфиг через env это админский антипатерн. Если есть сервис должен быть конфиг. А переменные окружения это что то личное себе в консоли настроить
источник

AK

Aleksey Kluchnikov in ErlangRus
антипарен потому что пременные можно выставлять и читать в любых разных местах. И разные люди менно так и поступают в результате чего получается бардак
источник

ИИ

Иванов Иванов... in ErlangRus
Aleksey Kluchnikov
конфиг через env это админский антипатерн. Если есть сервис должен быть конфиг. А переменные окружения это что то личное себе в консоли настроить
При чем тут окружение? Это как раз конфиг и есть, секция конфига по имени appname. Я понимаю когда формат не подходит. А в остальном это обычный конфиг.
источник

AK

Aleksey Kluchnikov in ErlangRus
set_env есть, значит окружение
источник

AK

Aleksey Kluchnikov in ErlangRus
а конфиг это файл, который вычитывается на старте
источник

AK

Aleksey Kluchnikov in ErlangRus
еще модные zookeper`ы есть их незнаю как называть
источник

SP

Sergey Prokhorov in ErlangRus
ну тем не менее sys.config это стандартный способ настройки Erlang релиза. Есть env секция в ebin/my_app.app, есть config_change/3 коллбек у application behaviour… Большинство opensource либ через него настраиваются…
источник

AK

Aleksey Kluchnikov in ErlangRus
ежаберд имеет конфайл
источник

AK

Aleksey Kluchnikov in ErlangRus
ребит наверное тоже
источник