具有多个/动态配置文件的Elixir应用程序

时间:2015-03-07 05:21:41

标签: elixir mix

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

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

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

感谢您提供的任何帮助。

编辑: 按照要求... 一旦主伞项目启动(不知道所有关于伞项目的知识,我将假设子应用程序启动命令无关紧要;稍后详细说明)服务器子应用程序,使用其启动参数,查询子应用程序存储库(Config.Query,包含针对查询表运行的查询)以获取完整的应用程序服务器配置:listen ipAddress和port,代码目录,最大连接数等。此配置由a维护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脚本来到达正确的目录,这在我看来是最好的选择。但是,阅读帕特里克的回答后,这看起来并不可能;没有读过配置文件是在编译时处理的东西。

1 个答案:

答案 0 :(得分:4)

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