【问题标题】:Phoenix - import module into configPhoenix - 将模块导入配置
【发布时间】:2017-06-16 19:19:58
【问题描述】:

对于我的 Phoenix 应用程序的本地开发版本,我想将一些密钥数据从 gitignore/ 目录导入到 config.exs。但是,有两件事我不确定:

  1. 我要导入的数据只是字符串数据——API 密钥、密钥——我需要定义一个模块,还是有更简单的方法来导出字符串数据?

  2. 在给定以下文件结构的情况下,在config.exs 中使用什么合适的导入语句:

    MyApp/
      |
      - config/
      |    |
      |    - config.exs
      |
      - gitignore/
           |
           - api_key.exs
           - api_secret.exs
    

我熟悉如何在 Node 中完成此操作,但我不确定如何在 Phoenix 中处理此操作。

为了说明我想要实现的目标,我的一个 Node 应用程序的示例如下所示:

index.js

const APISecret = process.env.API_SECRET || require('./gitignore/api_secret.js')
const APIKey = process.env.API_KEY || require('./gitignore/api_key.js')

所需文件的样子

module.exports = 'RANDOM_KEY_HERE'

应该如何格式化要忽略的数据,以及在config.exs 中访问该数据的适当方法是什么?

【问题讨论】:

    标签: elixir phoenix-framework


    【解决方案1】:

    并回答了我自己的问题...

    我添加了一个dev.secret.exs 文件,如下所示:

    use Mix.Config
    
    config :secret_things, 
      api_key: "NUMBERS",
      secret: "STUFF"
    

    然后将其导入dev.exs with

    import_config "dev.secret.exs"
    

    并将dev.secret.exs 包含在我的.gitignore 中。完成。

    【讨论】:

    • 如果您遇到此答案,我还建议您查看@BachirC,它也非常好,可能适合您。
    • 我对这种方法感到不舒服,因为您隐藏了应用程序使用的环境变量(注意我说的是变量而不是值),因为所有内容都在您的隐藏文件中 dev.secret.exs 而不是 dev.exs .因此,乍一看dev.exs,您将没有任何有关应用程序配置的信息,从而使该文件毫无意义。但这只是我的意见:)
    【解决方案2】:

    我宁愿建议在项目的根目录中使用 .env 文件,在其中放置所有开发环境变量(将其添加到 .gitignore)。它可能看起来像这样:

    export API_KEY=some_api_key
    export API_SECRET=some_api_secret
    

    然后,在您的 config/config.exs 中,像这样导出这些变量:

    config :secret_things,
      api_key: System.get_env("API_KEY"),
      api_secret: System.get_env("API_SECRET")
    

    很酷的是,Phoenix 会自动识别 .env 文件,因此 System.get_env/1 调用无需任何配置即可工作。

    然后您可以使用 Application.get_env(:secret_things, :api_key) 在您的应用中访问这些配置变量。

    重要提示:在当前终端选项卡中启动服务器或 IEx 时,不要忘记source .env。您无需在新标签中获取它。

    【讨论】:

    • 啊,这很酷。不过,我不熟悉 source 命令的范围 - 每次我在新的终端选项卡中启动应用程序时是否需要手动 $ source .env
    • 哦,我在上面找到了文档——看起来它只会为当前的 shell 运行它。我喜欢这个答案,但我不喜欢我(和团队中的其他开发人员)在启动服务器时必须运行附加命令的事实。我想知道是否可以将其编写到开发服务器的启动过程中...
    • 不过,我赞成它,因为我认为其他开发人员会从您的意见中受益。
    • 您不需要每次都获取它,只需在您想要启动服务器或 IEx 的当前终端选项卡中(就像任何其他 bash 脚本文件一样)。创建文件后打开一个新的终端选项卡不需要采购。我只是觉得有必要在我的回答中提醒它,因为它很容易被遗忘:) 我也许应该编辑我的答案以澄清这一点。
    猜你喜欢
    • 2017-07-16
    • 2021-11-12
    • 1970-01-01
    • 2021-10-22
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多