【问题标题】:Elixir application with multiple/dynamic config files具有多个/动态配置文件的 Elixir 应用程序
【发布时间】:2015-05-08 19:40:42
【问题描述】:

我有一个 elixir 应用程序,一个应用程序服务器,它将受益于启动参数。此应用程序使用 ecto 存储库,因此我可以将应用服务器的配置存储在那里,但我仍然需要一个配置密钥来从数据库中检索什么。

目前我一直在为服务器应用程序使用 config.exs(整个应用程序是一个伞形项目),但显然这只处理一个静态配置。

我的问题是: 我可以使用 mix 来指定我想使用的配置文件吗?我知道 Mix 库中有几个函数,但从我读过的内容来看,它们都是可以在应用程序启动后使用的函数。 同样,我可以使用 mix 来为任何子应用程序加载配置文件吗?

感谢您提供的任何帮助。

编辑: 按照要求... 一旦主伞项目已经启动(不知道所有关于伞项目的知识,我会假设子应用程序启动顺序无关紧要;细节稍后制定)服务器子应用程序,使用它的启动参数,查询子应用程序存储库(Config.Query,包含要针对查询表运行的查询)以获得完整的应用程序服务器配置:监听 ipAddress 和端口、代码目录、最大连接数等。此配置由genServer 可以根据需要被其他进程查询。

defmodule Hermes.Server.Info do
    use GenServer

    def start_link() do
        GenServer.start_link(__MODULE__, :ok, [name: :hermes_server_configuration])
    end

    def init(:ok) do
        system        = Application.get_env(:hermes_server, :system, "dev")
        client        = Application.get_env(:hermes_server, :client, "testClient")
        appServerName = Application.get_env(:hermes_server, :appServername, "testAppServerOne")
        config        = Config.Query.get_config(system, client, appServerName)
        {:ok, config}
    end
end

所以,如果我可以做类似于elixir --detached -S mix run --config pathToConfigFile 的事情,即使这意味着创建我自己的 bash 脚本以访问正确的目录,我认为这将是最好的选择。但是,在阅读了帕特里克的回答后,这看起来不太可能;没有读过配置文件是在编译时处理的。

【问题讨论】:

  • 这是一个很好的问题。假设你有项目 A 和 B,你可能已经注意到项目 A 中的配置不会影响项目 B。那么你打算做什么呢?启动B时以某种特定方式配置项目A?你能提供一些你希望它如何工作的伪代码sn-ps吗?

标签: elixir elixir-mix


【解决方案1】:

在编译时评估内置配置。要获得运行时配置,您需要使用第三方库,例如 conform 或推出您自己的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-05
    • 2011-10-24
    • 2018-05-19
    • 1970-01-01
    • 2022-12-12
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多