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

Que*_*ner 5 elixir-mix elixir

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

defp deps do
  [
    {:world_app, path: "../world_app"}
  ]
end
Run Code Online (Sandbox Code Playgroud)

world_app有config.exs有此配置

config :world_app, some_config: "config_string"
Run Code Online (Sandbox Code Playgroud)

当我尝试在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
Run Code Online (Sandbox Code Playgroud)

但是,当我在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"
Run Code Online (Sandbox Code Playgroud)

我一直以为我可以从父应用程序访问依赖项的配置;我在这里错过了一些重要的东西吗?

我正在使用 Elixir 1.5.3 和 erlang 20

Zol*_*tán 3

依赖项的配置不会自动导入。在伞式项目中,所有子项都可以看到彼此的配置,因为根配置包含以下神奇的行:

import_config "../apps/*/config/config.exs"
Run Code Online (Sandbox Code Playgroud)

它导入其所有子级的所有配置文件,相反,其所有子级都指向根配置文件mix.exs

defmodule ChildProject.MixProject do
  use Mix.Project

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

  (...)

end
Run Code Online (Sandbox Code Playgroud)

Mix & OTP 入门指南的一章对此进行了一些解释。


您可以使用相同的技巧通过添加以下行来显式导入依赖项的配置hello_app/config/config.exs

import_config "../../world_app/config/config.exs"
Run Code Online (Sandbox Code Playgroud)