无法访问主 elixir 项目中的依赖配置
Can't access a dependency config in main elixir project
我有一个项目 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 中定义的配置变量时,我的问题出现了(我 运行 iex -S 混入 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
依赖配置不会自动导入。在 umbrella projects 中,所有 children 都可以看到彼此的配置,因为根配置包含这条神奇的行:
import_config "../apps/*/config/config.exs"
导入其所有children的所有配置文件,反之,其所有children都指向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"
作为对 Zoltán 回答的更新,如果您使用 Config instead of Mix.Config in documentation 说明:
Make sure your import_config/1 calls do not have a wildcard character.
If so, you need to perform the wildcard lookup manually. For example,
if you did:
import_config "../apps/*/config/config.exs"
It has to be replaced by:
for config <- "../apps/*/config/config.exs" |> Path.expand(__DIR__) |> Path.wildcard() do
import_config config
end
我有一个项目 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 中定义的配置变量时,我的问题出现了(我 运行 iex -S 混入 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
依赖配置不会自动导入。在 umbrella projects 中,所有 children 都可以看到彼此的配置,因为根配置包含这条神奇的行:
import_config "../apps/*/config/config.exs"
导入其所有children的所有配置文件,反之,其所有children都指向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"
作为对 Zoltán 回答的更新,如果您使用 Config instead of Mix.Config in documentation 说明:
Make sure your import_config/1 calls do not have a wildcard character. If so, you need to perform the wildcard lookup manually. For example, if you did:
import_config "../apps/*/config/config.exs"
It has to be replaced by:
for config <- "../apps/*/config/config.exs" |> Path.expand(__DIR__) |> Path.wildcard() do
import_config config
end