Комментарии 26
Вечная головная боль в elixir/phoenix — управление конфигами. Дело в том, что при компиляции конфиг приложения превращается в статический файл с намертво прибитыми гвоздями значениями. Т е любое изменение требует пересборки, причем с предварительно подсунутыми правильными данными. Зачем такое извращение было добавлено в язык — понятия не имею.
Если кто-то знает как это можно адекватно обрабатывать — очень хочу услышать.
Что насчёт System.get_env
в конфиге?
Ну и вообще, вы что, хотели, чтобы в application env лежали thunk-и, которые вычислялись про каждом вызове Application.get_env?
Нет, из коробки ничего подобного нет и не будет. Хотя бы потому, что это невозможно нормально подружить с hot code reload как он реализован в BEAM.
Ну и вообще, моя обычная рекомендация — не пользуйтесь релизами, это непростая в использовании и очень специфичная фича, она категорически не для всех.
При каждом вызове — не надо. При каждом старте приложения — надо
Например FOO=bar mix phoenix.server
Вообще, конечно, разработчики Elixir меня удивляют все больше и больше.
Чуть выше написали причину (наследие erlang) — такое поведение только в конфиге, в любом другом месте кода все ок. Вообще конечно косяки такого рода в языке есть но на удивление мало, очень много всего из коробки сделано очень чисто и продуманно
Вообще говоря, ничего подобного происходить не должно, но я пока не могу найти, где там ошибка.
Другой дело, если у вас значения из ENV через конфиг используются в макросах, тогда да, нужно будет перекомпилировать проект. Где в Phoenix макросы я точно не знаю, но в этом случае точно ничего удивительного нет. В этом случае рекомендую делать touch config/config.exs перед каждым запуском.
Вам лично — «двойка» за умение формулировать проблемы.
А если не пользоваться релизами, тогда как? Каждый раз git pull?
При этом все скачут как дурни вокруг hot code reload, а на вопрос: как будете перечитывать конфиг, скакуны бодро отвечают: рестартить приложение с новым конфигом, который уже лежит на сервере под рутовыми правами и недоступный для редактирования.
Это всё растет из того, что на эликсире-эрланге редко пишут отчуждаемые приложения, которые пишутся одними, а деплоятся другими людьми.
Иронично, первая картинка от Octopus Deploy, если не ошибаюсь.
Elixir: Развёртывание приложений с помощью Edeliver