无法在主elixir项目中访问依赖项配置

时间:2018-05-25 14:14:15

标签: elixir mix

我有一个项目 world_app ,我已将其作为依赖项包含在 hello_app 中(如果相关的话,我已将其作为本地依赖项包含在内)

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

world_app 有一个具有此配置的config.exs

config :world_app, some_config: "config_string"

当我尝试在 hello_app 中的 world_app 中定义配置变量时出现问题(我在hello_app中运行了iex -S mix)

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 :(得分:3)

不会自动导入依赖项的配置。在umbrella projects中,所有孩子都会看到彼此的配置,因为根配置包含这条神奇的线路:

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

这在chapter of the Mix & OTP Getting Started Guide中有所解释。

您可以使用相同的技巧通过将此行添加到hello_app/config/config.exs来显式导入依赖关系的配置:

import_config "../../world_app/config/config.exs"