bugfix> elixir > 投稿

プロジェクトがありますworld_app 私が含めたhello_app 依存関係として(関連する場合はローカルの依存関係として含めました)

defp deps do
  [
    {:world_app, path: "../world_app"}
  ]
end

world_app この構成を持つconfig.exsがあります

config :world_app, some_config: "config_string"

で定義されている設定変数を取得しようとすると、私の問題が発生しますworld_app にhello_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

しかし、私が同じことをするとき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を使用しています

回答 1 件
  • 依存関係の構成は自動的にインポートされません。アンブレラプロジェクトでは、ルート構成に次の魔法の行が含まれているため、すべての子が互いの構成を確認します。

    import_config "../apps/*/config/config.exs"
    
    

    これは、そのすべての子のすべての構成ファイルをインポートし、逆に、すべての子は mix.exs のルート構成ファイルを指します :

    defmodule ChildProject.MixProject do
      use Mix.Project
      def project do
        [
          (...)
          config_path: "../../config/config.exs",
          (...)
        ]
      end
      (...)
    end
    
    

    これについては、Mix&OTP入門ガイドの章で多少説明されています。


    同じトリックを使用して、次の行を hello_app/config/config.exs に追加することにより、依存関係の構成を明示的にインポートできます。 :

    import_config "../../world_app/config/config.exs"
    
    

あなたの答え