Как получить значение переменной из файлов окружения в Phoenix?
Я развертываю свое первое приложение Phoenix, и я указал значения переменной в своих файлах среды (dev.exs
и prod.exs
).
Теперь я пытаюсь выяснить, как получить доступ к ним в моих контроллерах.
# config/dev.exs
config :my_app, MyApp.Endpoint,
http: [port: 4000],
debug_errors: true,
cache_static_lookup: false,
my_var: "DEVELOPMENT VALUE"
# config/prod.exs
config :my_app, MyApp.Endpoint,
http: [port: {:system, "PORT"}],
url: [host: "example.com"],
my_var: "PRODUCTION VALUE"
Ответы
Ответ 1
Хорошо, нашел что-то. Эликсир Application.get_env/3
- это путь:
get_env (приложение, ключ, по умолчанию \\nil)
Но проблема в том, что команда accessor становится очень длинной для текущей ситуации:
# Set value in config/some_env_file.exs
config :my_large_app_name, MyLargeAppName.Endpoint,
http: [port: {:system, "PORT"}],
url: [host: "example.com"],
my_var: "MY ENV VARIABLE"
# Get it back
Application.get_env(:my_large_app_name, MyLargeAppName.Endpoint)[:my_var]
Лучшим способом было бы определить их в отдельном разделе:
config :app_vars,
a_string: "Some String",
some_list: [a: 1, b: 2, c: 3],
another_bool: true
и получить доступ к ним следующим образом:
Application.get_env(:app_vars, :a_string)
# => "Some String"
Или вы можете получить list
всех пар ключ-значение:
Application.get_all_env(:app_vars)
# => [a_string: "Some String", some_list: [a: 1, b: 2, c: 3], another_bool: true]
Ответ 2
У меня была ошибка с решением @sheharyar, поэтому здесь означают:
Мне пришлось создать новый блок без MyLargeAppName.Endpoint,
# Set value in config/some_env_file.exs
config :my_large_app_name,
my_var: "MY ENV VARIABLE"
а затем в вашем коде
Application.get_env(:my_large_app_name, :my_var)
ПРЕДУПРЕЖДЕНИЕ: поскольку @Хосе Валим сказал, что вы не можете установить какое-либо имя в качестве ключевого :my_large_app_name
, оно должно быть таким же из вашего проекта