Не удается получить доступ к конфигурации зависимостей в основном проекте elixir - PullRequest
0 голосов
/ 25 мая 2018

У меня есть проект world_app , который я включил в hello_app в качестве зависимости (я включил его в качестве локальной зависимости, если это актуально)

defp deps do
  [
    {:world_app, path: "../world_app"}
  ]
end

world_app имеет config.exs, который имеет эту конфигурацию

config :world_app, some_config: "config_string"

Моя проблема возникает, когда я пытаюсь получить переменную конфигурации, определенную в world_app в hello_app (я запустил iex -S mix в hello_app)

iex(1)> Application.get_all_env(:world_app)
[included_applications: []]

iex(2)> Application.get_env(:world_app, :some_config)
nil

Однако, когда я делаю то же самое в world_app , я вижу переменные

iex(1)> Application.get_all_env(:world_app)
[some_config: "config_string", included_applications: []]

iex(2)> Application.get_env(:world_app, :some_config)
"config_string"

У меня всегда было впечатление, что я могу получить доступ к конфигурации зависимостей из родительского приложения;я что-то упустил здесь?

Я использую Elixir 1.5.3 и erlang 20

1 Ответ

0 голосов
/ 25 мая 2018

Конфигурации зависимостей не импортируются автоматически.В зонтичных проектах все дочерние элементы видят конфигурацию друг друга, потому что корневая конфигурация содержит следующую магическую строку:

import_config "../apps/*/config/config.exs"

, которая импортирует все файлы конфигурации всех своих дочерних элементов и, наоборот, всех дочерних элементов.указывают на корневой файл конфигурации в mix.exs:

defmodule ChildProject.MixProject do
  use Mix.Project

  def project do
    [
      (...)
      config_path: "../../config/config.exs",
      (...)
    ]
  end

  (...)

end

Это несколько объяснено в главе Руководства по началу работы с Mix & OTP .


Вы можете использовать этот же прием для явного импорта конфигурации зависимости, добавив эту строку в hello_app/config/config.exs:

import_config "../../world_app/config/config.exs"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...