Как стать автором
Обновить

Комментарии 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, а на вопрос: как будете перечитывать конфиг, скакуны бодро отвечают: рестартить приложение с новым конфигом, который уже лежит на сервере под рутовыми правами и недоступный для редактирования.

Это всё растет из того, что на эликсире-эрланге редко пишут отчуждаемые приложения, которые пишутся одними, а деплоятся другими людьми.
НЛО прилетело и опубликовало эту надпись здесь

mix edeliver migrate


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

НЛО прилетело и опубликовало эту надпись здесь

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

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

НЛО прилетело и опубликовало эту надпись здесь

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

зачем nginx то?

Эрланговский веб-сервер не хуже нжинкса.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
На build сервере
НЛО прилетело и опубликовало эту надпись здесь
nginx тут вообще ни при чем
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории