如何在Phoenix/Elixir中读取配置变量?

Ale*_*hin 43 elixir phoenix-framework

我想在my/config/config.exs文件中设置我的应用程序的标题:

config :my, My.Endpoint,
  url: [host: "localhost"],
  root: Path.dirname(__DIR__),
  secret_key_base: "secret",
  title: "My App"
Run Code Online (Sandbox Code Playgroud)

我怎样才能读到title以后在模板中使用它?就像是:

<div>
  Title of my app is <%= ??? %>
</div>
Run Code Online (Sandbox Code Playgroud)

我试过conn.title,它说没有这样的钥匙.但是,当我尝试conn.secret_key_base它的时候.为什么?

Tia*_*gel 60

get_env功能是从药剂/二郎芯中的应用模块的一部分.

此函数返回应用程序环境中特定键的值.考虑到您的配置,您将以title这种方式访问该属性:

Application.get_env(:my, My.Endpoint)[:title]
Run Code Online (Sandbox Code Playgroud)

第三个参数用于在config键不存在时传递默认值.


Sas*_*eca 32

你可以用 Application.get_env(:my, :title)

  • 这个答案是不正确的,至少在我的系统上是这样.[tiagohngl](/sf/answers/2502836241/)给出了正确的咒语. (4认同)
  • 它有效,如果你有`config:my,:title,"value"` (4认同)

Jag*_*h N 9

假设在dev.ex文件中,您有一个配置变量

config :app_name, AppName.Endpoint,
  api_prefix: "api/v2",
  api_host: "http://0.0.0.0",
  api_port: "3000"
Run Code Online (Sandbox Code Playgroud)

您可以获取所有三个配置变量

Application.get_env(:app_name, AppName.Endpoint)[:api_prefix]
Application.get_env(:app_name, AppName.Endpoint)[:api_host]
Application.get_env(:app_name, AppName.Endpoint)[:api_port] 
Run Code Online (Sandbox Code Playgroud)


ihe*_*gie 5

为了在我使用的 phoenix 和其他模块的自定义配置和配置之间明确分离:

config :ace, :config,
  root: Path.dirname(__DIR__),
  title: "Ace"
Run Code Online (Sandbox Code Playgroud)

然后使用 get_env 调用检索值,例如:

iex> Application.get_env(:ace, :config)[:title]
"Ace" 
Run Code Online (Sandbox Code Playgroud)