4

起動パラメーターの恩恵を受けるアプリケーションサーバーであるエリクサーアプリケーションがあります。このアプリケーションは ecto リポジトリを使用するため、そこにアプリ サーバーの構成を保存できますが、db から何を取得するかについては構成キーが必要です。

現在、サーバー アプリケーションに config.exs を使用しています (アプリケーション全体が包括的なプロジェクトです) が、明らかに、これは 1 つの静的構成しか処理しません。

私の質問は: mix を使用して、使用したい構成ファイルを指定できますか? Mix ライブラリにいくつかの関数があることは知っていますが、私が読んだ限りでは、それらはすべてアプリケーションの起動後に使用できる関数です。同様に、mix を使用して子アプリケーションの構成ファイルをロードできますか?

助けてくれてありがとう。

編集:要求に応じて...メインの傘プロジェクトが開始されたら(傘プロジェクトについて知っておくべきことがすべてわかっていないので、子アプリケーションの起動順序は重要ではないと仮定します;詳細は後で解決します)サーバー子アプリケーションは、その起動引数を使用して、子アプリケーション リポジトリ (Config.Query、クエリ テーブルに対して実行されるクエリを含む) にクエリを実行して、完全なアプリケーション サーバー構成 (リッスン IP アドレスとポート、コード ディレクトリ、接続の最大数など) を取得します。 . この構成は、必要に応じて他のプロセスから照会できる 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 スクリプトを作成することを意味するとしても、それが私の意見では最良の選択肢です。しかし、パトリックの答えを読んで、それは不可能に見えます。構成ファイルがコンパイル時に処理されるものであることを読んでいませんでした。

4

1 に答える 1

4

組み込み構成はコンパイル時に評価されます。ランタイム構成を取得するには、 conformや rollなどのサード パーティ製ライブラリを使用して独自のソリューションを作成する必要があります。

于 2015-03-07T07:51:22.240 に答える