Проблемы с получением значений конфигурации в контроллере 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), например, похоже, ничего не возвращает.

Я что-то упускаю?


person Tayler    schedule 05.08.2015    source источник
comment
Читая документ, кажется, что вы можете определить эти переменные env внутри функции application в файле mix.exs, а не внутри конфигурации. elixir-lang.org/docs/v1.0/elixir/Application. html   -  person Kernael    schedule 05.08.2015


Ответы (1)


Как вы можете видеть в документации для модуля 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 для приложения. Фактически, его аргументы - это имя приложения и список пар ключ-значение.

person whatyouhide    schedule 05.08.2015
comment
Это было правильно! Спасибо за подробное объяснение. - person Tayler; 05.08.2015