web-dev-qa-db-ja.com

Phoenix / Elixirの設定変数の読み方

my/config/config.exsファイルにアプリのタイトルを設定したい:

config :my, My.Endpoint,
  url: [Host: "localhost"],
  root: Path.dirname(__DIR__),
  secret_key_base: "secret",
  title: "My App"

後でtitleを読み取ってテンプレートで使用するにはどうすればよいですか?何かのようなもの:

<div>
  Title of my app is <%= ??? %>
</div>

conn.titleを試しましたが、そのようなキーはありませんと表示されます。しかし、conn.secret_key_baseを試してみるとうまくいきます。どうして?

41

Application.get_env(:my, :title)を使用できます

30
Sasha Fonseca

get_env 関数は、Elixir/ErlangコアのApplicationモジュールの一部です。

この関数は、アプリの環境内の特定のキーの値を返します。構成を考慮して、次の方法でtitleプロパティにアクセスします。

Application.get_env(:my, My.Endpoint)[:title]

3番目のパラメーターは、構成キーが存在しない場合にデフォルト値を渡すためのものです。

60

Dev.exファイルに設定変数があるとしましょう

config :app_name, AppName.Endpoint,
  api_prefix: "api/v2",
  api_Host: "http://0.0.0.0",
  api_port: "3000"

3つの構成変数すべてをフェッチできます

Application.get_env(:app_name, AppName.Endpoint)[:api_prefix]
Application.get_env(:app_name, AppName.Endpoint)[:api_Host]
Application.get_env(:app_name, AppName.Endpoint)[:api_port] 
7
Jagdish N

カスタム構成と、私が使用したphoenixおよびその他のモジュールの構成を明確に区別するには:

config :ace, :config,
  root: Path.dirname(__DIR__),
  title: "Ace"

そして、次のようなget_env呼び出しを使用して値を取得します。

iex> Application.get_env(:ace, :config)[:title]
"Ace" 
4
iheggie

フードの下で設定がキーワードリストに設定値を追加する単なる関数であり、後でアプリでそれらにアクセスできるかどうかを見ると

_config/2_はキーを取得してkeyword_listにマップし、_config/3_はキーを取得し、keyword_listを値としてキーを追加します。

_config/3_を使用しているので、My.Endpointの下で設定に名前空間を割り当てます。これはApplication.get_env(:my, My.Endpoint, :title)になります

2
allyraza