Выбор конфигурации релизов для зонтичного проекта - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть 3 зонтичных проекта:

  • бизнес-логика;
  • Rest API;
  • Web.

У меня есть следующая конфигурация в root mix.exs:

releases: [
        web: [
          applications: [web_project: :permanent]
        ],
        api: [
          applications: [rest_api_project: :permanent]
        ]
      ]

Проблема заключается в том, что каждый раз, когда я запускаю mix release release_name, конфигурация времени выполнения загружается из проекта root, а не из указанных проектов.

Я даже пытался загрузить другие конфиги следующим образом:

for config <- "../apps/*/config/releases.exs" |> Path.expand(__DIR__) |> Path.wildcard() do
  import_config config
end

Однако, похоже, это не работает, используется конфигурация времени компиляции.

Ответы [ 2 ]

2 голосов
/ 13 февраля 2020

Я выбрал другой путь, поскольку оверлеи не дают никакой гибкости при использовании steps:

web: [
          applications: [my_app: :permanent],
          config_providers: [
            {Config.Reader, {:system, "RELEASE_ROOT", "apps/my_app/config/releases.exs"}},
            {Config.Reader, {:system, "RELEASE_ROOT", "apps/another_app/config/releases.exs"}},
          ],
          steps: [:assemble, &copy_configs/1]
        ]

Таким образом, я могу извлечь path и config_providers и переместить их в папку релизов:

defp copy_configs(%{path: path, config_providers: config_providers} = release) do
    for {_module, {_context, _root, file_path}} <- config_providers do
      # Creating new path
      new_path = path <> Path.dirname(file_path)
      # Removing possible leftover files from previous builds
      File.rm_rf!(new_path)
      # Creating directory if it doesn't exist
      File.mkdir_p!(new_path)
      # Copying files to the directory with the same name
      File.cp!(Path.expand(file_path), new_path <> "/" <> Path.basename(file_path))
    end

    release
  end
1 голос
/ 13 февраля 2020

После обнаружения аналогичной проблемы , предложенной Хосе Валимом, предлагается использовать наложения. Единственная проблема в настоящее время с оверлеями состоит в том, что вы можете указывать только на указанную папку c, что противоположно гибкости, которую вы имеете с Disitllery Overlays .

Окончательное решение заключается в следующем:

releases: [
        web: [
          applications: [my_app: :permanent],
          config_providers: [{Config.Reader, {:system, "RELEASE_ROOT", "/releases.exs"}}],
          overlays: "apps/my_app/config"
        ]
   ]
...