Ошибка получения значений конфигурации в контроллере и/или шаблоне Phoenix

Я пытаюсь получить значение из конфигурационного файла Phoenix в контроллере.

# config.exs

use Mix.Config

config :app_name, AppName.Endpoint,
  url: [host: "localhost"],
  debug_errors: false,
  root: Path.expand("..", __DIR__)

Application.get_env(:app_name, :url), например, кажется, ничего не возвращает.

Я что-то пропустил?

Ответ 1

Как вы можете видеть в docs для модуля Mix.Config, существует два варианта config: config/2 и config/3. Вы используете вариант config/3, поскольку вы передаете три аргумента:

  • :app_name
  • AppName.Endpoint
  • список ключевых слов ([url: ..., debug_errors: ...])

Это означает, что вы настраиваете ключ AppName.Endpoint в среде приложения :app_name и устанавливаете его значение в список ключевых слов (помните, что AppName.Endpoint является просто атомом, поэтому его можно использовать как ключ). Чтобы получить URL-адрес, вам нужно сделать что-то вроде:

Application.get_env(:app_name, AppName.Endpoint)[:url]

Для полноты config/2 позволяет установить несколько пар ключ-значение в env для приложения. Его аргументы - это, по сути, имя приложения и список пар ключ-значение.