Как читать переменную конфигурации в Phoenix / Elixir?

Я хотел бы установить название моего приложения в :

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 это работает. Почему?

5 ответов


вы можете использовать Application.get_env(:my, :title)


на get_env функция является частью модуля приложения из ядра Elixir/Erlang.

эта функция возвращает значение определенного ключа в среде приложения. Учитывая вашу конфигурацию, вы получите доступ к title собственность таким образом:

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

третий параметр предназначен для передачи значения по умолчанию, когда конфигурационный ключ не существует.


чтобы иметь четкое разделение между моей пользовательской конфигурацией и конфигурацией для phoenix и других модулей, которые я использовал:

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

и затем вы получаете значение, используя вызов get_env, например:

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

скажем в dev.ex файл у вас есть переменные конфигурации

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

вы можете получить все три переменные конфигурации

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] 

если вы посмотрите под капотом, как конфигурация-это просто функция, которая добавляет значения конфигурации в список ключевых слов, и позже вы можете получить к ним доступ в своем приложении

config/2 берет ключ и сопоставляет его с keyword_list, config/3 берет ключ и добавляет ключ с keyword_list в качестве значения.

если вы используете config/3 это namesapces ваша конфигурация под моим.Конечная точка это будет работать Application.get_env(:my, My.Endpoint, :title)