Приложение Elixir с несколькими / динамическими конфигурационными файлами

У меня есть приложение с эликсиром, сервер приложений, которому будут полезны параметры запуска. Это приложение использует репозиторий ecto, поэтому я могу хранить там конфигурацию сервера приложений, но мне все равно понадобится ключ конфигурации для того, что извлекать из базы данных.

В настоящее время я использую config.exs для серверного приложения (все приложение является зонтичным проектом), но, очевидно, он обрабатывает только одну статическую конфигурацию.

Мой вопрос: могу ли я использовать микс, чтобы указать, какой файл конфигурации я хотел бы использовать? Я знаю, что в библиотеке Mix есть несколько функций, но из того, что я прочитал, все они могут использоваться после запуска приложения. И аналогично, могу ли я использовать смесь для загрузки файлов конфигурации для любого из дочерних приложений?

Спасибо за любую предоставленную помощь.

РЕДАКТИРОВАТЬ: По запросу ... После запуска основного зонтичного проекта (не зная всего, что нужно знать о зонтичных проектах, я предполагаю, что порядок запуска дочерних приложений не будет иметь значения; подробности будут разработаны позже) сервер дочернее приложение, используя свои аргументы запуска, запрашивает репозиторий дочерних приложений (Config.Query, содержат запросы, которые будут запускаться по таблице запросов) для полной конфигурации сервера приложений: прослушивание ipAddress и порта, каталог кода, максимальное количество подключений и т. д. Эта конфигурация поддерживается genServer, который при необходимости может быть запрошен другими процессами.

defmodule Hermes.Server.Info do
    use GenServer

    def start_link() do
        GenServer.start_link(__MODULE__, :ok, [name: :hermes_server_configuration])
    end

    def init(:ok) do
        system        = Application.get_env(:hermes_server, :system, "dev")
        client        = Application.get_env(:hermes_server, :client, "testClient")
        appServerName = Application.get_env(:hermes_server, :appServername, "testAppServerOne")
        config        = Config.Query.get_config(system, client, appServerName)
        {:ok, config}
    end
end

Итак, если бы я мог сделать что-то похожее на elixir --detached -S mix run --config pathToConfigFile, даже если бы это означало создание моего собственного сценария bash для перехода в правильный каталог, это был бы лучший вариант, на мой взгляд. Но, прочитав ответ Патрика, это кажется невозможным; не читал, что файлы конфигурации - это то, чем занимаются во время компиляции.


person SolomonS    schedule 07.03.2015    source источник
comment
Это очень хороший вопрос. Представьте, что у вас есть проекты A и B, вы, возможно, уже заметили, что конфигурация в проекте A не влияет на проект B. Итак, что вы собираетесь делать? Сконфигурировать проект A каким-то определенным образом при запуске B? Не могли бы вы предоставить несколько фрагментов псевдокода о том, как вы хотите, чтобы это работало?   -  person José Valim    schedule 07.03.2015


Ответы (1)


Встроенная конфигурация оценивается во время компиляции. Чтобы получить конфигурацию среды выполнения, вам необходимо использовать стороннюю библиотеку, такую ​​как compliance. или раскатайте собственное решение.

person Patrick Oscity    schedule 07.03.2015