【问题标题】:Environment Variables in App Engine for local devApp Engine 中用于本地开发的环境变量
【发布时间】:2017-06-14 04:00:03
【问题描述】:

在本地机器上为 App Engine Flex 环境开发 nodejs 时,设置环境变量的最佳方法是什么?如果它们是在 app.yaml 中设置的,那么它们不会在本地开发过程中设置。有没有办法强制这样做,或者我应该使用 dotenv 之类的东西并在 2 个地方跟踪相同的环境变量?

【问题讨论】:

    标签: node.js google-app-engine


    【解决方案1】:

    艾丹的建议很好。

    由于 GAE 和本地的配置应该不同,我建议选项 2 最好 - 一个单独的 .ENV 用于本地,.YAML 用于 GAE 环境。

    不过有一点。我建议添加一个.gcloudignore 文件,如下所示:

    .gcloudignore
    .git
    .gitignore
    .env
    staging.yaml
    node_modules/
    

    【讨论】:

      【解决方案2】:

      不应将敏感数据(例如 API 密钥)提交到源代码。

      我绕过的方法是将.env 文件存储在 Google 存储中。然后您可以使用@google-cloud/storage 在生产环境中下载它(使用prestart 挂钩)和dotenv 将变量加载到内存中。

      您可以在此处找到完整指南:http://gunargessner.com/gcloud-env-vars/


      PS:我会选择 Aidan 的答案来存储任何不敏感的数据。我自己过去使用过dotenv 令人满意。 与此类似,还有nconf,即gcloud 本身uses for examples 的包。很整洁!

      【讨论】:

      • 这太棒了!我唯一要补充的是,不要在这一行 const dsKey = ds.key(['ENV_VAR', 'production']) 上详细声明环境变量 production,而是使用 NODE_ENV 变量。所以该行现在看起来像这样const dsKey = ds.key(['ENV_VAR', process.env.NODE_ENV]) 这样您就可以通过两个键(开发和生产)将所有配置文件放在那里。
      • 谢谢,@GarrettTacoronte。我同意,但现在我已经更新了答案以使用更简单的替代方案。你应该检查一下!
      【解决方案3】:

      选项 1:

      require('dotenv').config({path: '/custom/project/root/app.yaml'})

      选项 2:

      维护 .env 文件和 .yaml 文件,它们的键相同但值不同(分别为本地和 GAE)。在 app.yaml 中,我确保不通过添加以下行来部署我的 .env 文件:

      skip_files : .env

      然后,您需要在 ('dotenv').config() 上添加检查,以确保在未检测到 .env 文件时它不会出错或覆盖您的流程变量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-16
        • 1970-01-01
        • 1970-01-01
        • 2014-09-16
        • 2015-11-15
        • 1970-01-01
        相关资源
        最近更新 更多