Pull to refresh

Comments 26

Вечная головная боль в elixir/phoenix — управление конфигами. Дело в том, что при компиляции конфиг приложения превращается в статический файл с намертво прибитыми гвоздями значениями. Т е любое изменение требует пересборки, причем с предварительно подсунутыми правильными данными. Зачем такое извращение было добавлено в язык — понятия не имею.
Если кто-то знает как это можно адекватно обрабатывать — очень хочу услышать.

Что насчёт System.get_env в конфиге?

Использую. Работает, но фиксирует значение во время компиляции. Требуется рекомпиляция для изменения

Мы используем вот этот скрипт для перегенерации «статического» файла из эликсировского сырца в момент деплоя релиза. Вот статья автора, где он описывает как это работает.

Там же упомянута более тяжелая альтернатива — conform, но ее мы не пробовали.
Конфиги в Elixir — небольшой сахар для application env в Erlang, в котором хранятся статические значения. Так что, ничего удивительного в этом нет.

Ну и вообще, вы что, хотели, чтобы в application env лежали thunk-и, которые вычислялись про каждом вызове Application.get_env?
Нет, из коробки ничего подобного нет и не будет. Хотя бы потому, что это невозможно нормально подружить с hot code reload как он реализован в BEAM.

Ну и вообще, моя обычная рекомендация — не пользуйтесь релизами, это непростая в использовании и очень специфичная фича, она категорически не для всех.

При каждом вызове — не надо. При каждом старте приложения — надо
Например FOO=bar mix phoenix.server

А вот это уже удивительно.
Вообще, конечно, разработчики Elixir меня удивляют все больше и больше.

Чуть выше написали причину (наследие erlang) — такое поведение только в конфиге, в любом другом месте кода все ок. Вообще конечно косяки такого рода в языке есть но на удивление мало, очень много всего из коробки сделано очень чисто и продуманно

Нет, вот это интересное поведение — не наследие Erlang. Application env, конечно, статичен, но не настолько. В том комменте я говорил о другом.

Вообще говоря, ничего подобного происходить не должно, но я пока не могу найти, где там ошибка.
А вот про продуманность я бы очень сильно поспорил, в языке, stdlib и plug есть достаточно просто абсурдных вещей, про которые авторы считают, что все ок. Я когда-нибудь напишу пост о них, когда не лень будет.
Все там нормально работает. Там есть пара странностей в духе «если в конфиге nil, Application.get_env :app, :var_name, 123123 вернет nil, а не 123123», но никакого кеширования конфигов между запусками нет и не может быть by design.

Другой дело, если у вас значения из ENV через конфиг используются в макросах, тогда да, нужно будет перекомпилировать проект. Где в Phoenix макросы я точно не знаю, но в этом случае точно ничего удивительного нет. В этом случае рекомендую делать touch config/config.exs перед каждым запуском.

Вам лично — «двойка» за умение формулировать проблемы.

А если не пользоваться релизами, тогда как? Каждый раз git pull?

эта херня растет из той дури, что можно держать аппликейшн конфиг в файлах типа sys.config

При этом все скачут как дурни вокруг hot code reload, а на вопрос: как будете перечитывать конфиг, скакуны бодро отвечают: рестартить приложение с новым конфигом, который уже лежит на сервере под рутовыми правами и недоступный для редактирования.

Это всё растет из того, что на эликсире-эрланге редко пишут отчуждаемые приложения, которые пишутся одними, а деплоятся другими людьми.
UFO just landed and posted this here

mix edeliver migrate


Если экто — то на автомате

UFO just landed and posted this here

Если вы написали собственный механизм миграций — то и edeliver у надо будет рассказать как мигрировать.
Если вы используете ecto — то он и сам знает.
Вот что значит "на автомате"

Иронично, первая картинка от Octopus Deploy, если не ошибаюсь.

UFO just landed and posted this here

По-моему, нигде в проекте на хранятся пользовательские данные. Если это картинки и файлы — в отдельной папочке, которая даже не обрабатывается beamом, а сервится прямо нгинксом.

зачем nginx то?

Эрланговский веб-сервер не хуже нжинкса.
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
nginx тут вообще ни при чем
Sign up to leave a comment.

Articles