How to get a variable value from Environment files in Phoenix?

时光总嘲笑我的痴心妄想 提交于 2019-12-22 02:21:11

问题


I'm deploying my first Phoenix Application, and I've specified the values of a variable in my Environment Files (dev.exs and prod.exs).

Now I'm trying to figure out how to access them in my Controllers.

# 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:


Okay, found something. Elixir's Application.get_env/3 is the way to go:

get_env(app, key, default \\ nil)


But the problem with this is that the accessor command becomes very long for the current situation:

# 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]

A better way would be to define them in a separate section:

config :app_vars,
  a_string: "Some String",
  some_list: [a: 1, b: 2, c: 3], 
  another_bool: true

and access them like this:

Application.get_env(:app_vars, :a_string)
# => "Some String"

Or you could fetch a list of all key-value pairs:

Application.get_all_env(:app_vars)           
# => [a_string: "Some String", some_list: [a: 1, b: 2, c: 3], another_bool: true]



回答2:


I had some bug with @sheharyar solution, so here mean:

I had to create new block without MyLargeAppName.Endpoint,

# Set value in config/some_env_file.exs
config :my_large_app_name,
  my_var: "MY ENV VARIABLE"

and then in your code

Application.get_env(:my_large_app_name, :my_var)

WARNING: as @José Valim said you can not set any name as key :my_large_app_name it have to be the same of your project



来源:https://stackoverflow.com/questions/30995743/how-to-get-a-variable-value-from-environment-files-in-phoenix

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!