代码之家  ›  专栏  ›  技术社区  ›  bigpotato

Phoenix:如何设置环境变量?

  •  0
  • bigpotato  · 技术社区  · 2 年前

    我有一个URL,它会根据我是在开发中还是在生产中而变化

    在dev中,它应该是 http:localhost:3000 在prod中,它应该是 https://www.foobar.com

    1. 我将在哪里设置此环境变量的值?
    2. 我需要如何更新控制器中的这个代码段,以便它使用这个环境变量?
        conn
          |> redirect(external: "http://localhost:3000")
    
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   JasonTrue    2 年前

    如果您知道这是一个编译时变量,您可以在中设置它 config/dev.exs , config/test.exs config/prod.exs (或者在config/config.exs`中设置它,并在不同的环境中覆盖它)。

    如果您需要它在运行时进行配置(即,您可以在使用构建发布后进行更改 mix release ),您可以使用 runtime.exs 取而代之的是。

    我认为有一个示例是默认为您生成的:

    config :my_app, MyAppWeb.Endpoint,
      url: [host: "localhost"],
    

    这种类型的嵌套配置可以通过例如,

     Application.get_env(:my_app, MyAppWeb.Endpoint, :url) |> Keyword.get(url)
    # returns [host: "localhost"]
    

    你也可以这样做:

    config :my_app, external_support_site: 
    "https://support.example.com"
    

    在runtime.exs中,如果您真的想使用环境变量作为URL的源,可以使用 System.get_env("EXTERNAL_SUPPORT_SITE") 作为您分配给的值

    config :my_app, :external_support_site, System.get_env("EXTERNAL_SUPPORT_SITE")
    

    您可以在示例中访问,如下所示:

    conn
    |> redirect(external: Application.get_env(:my_app, :external_support_site, "https://some-default.example.com)