如何从 Phoenix 的环境文件中获取变量值?
How to get a variable value from Environment files in 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"
好的,找到东西了。 Elixir's Application.get_env/3
是要走的路:
但问题是访问命令对于当前情况变得很长:
# 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]
我在@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)
警告:正如@José Valim 所说,您不能将任何名称设置为键 :my_large_app_name
它必须与您的项目相同
我正在部署我的第一个 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"
好的,找到东西了。 Elixir's Application.get_env/3
是要走的路:
但问题是访问命令对于当前情况变得很长:
# 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]
我在@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)
警告:正如@José Valim 所说,您不能将任何名称设置为键 :my_large_app_name
它必须与您的项目相同