繁体   English   中英

在Heroku中设置默认环境变量

[英]Setting default environment variables in Heroku

我正在开发一个连接到需要使用APP ID和SECRET KEY的第三方API的应用程序。

我将这些值作为环境变量存储在heroku中,因此无需在代码中公开它们。

如果我部署到heroku,它将使用heroku的环境变量来解析这些API凭据。

如果我在本地处理它,那么我想使用config.js模块,并在那里查找API凭据。 注意:此config.js文件包含在我的.gitignore因此这些凭据永远不会出现在云中。

有问题的代码是这样的:

var api_secret = process.env.API_SECRET || require('../../config.js').secret;

在本地运行时,没有任何问题。 这意味着,它无法解析环境变量,因此它使用config.jssecret

当我在heroku上运行它时,它确实抛出错误,告诉我module 'config.js' could not be found 这是有道理的,因为由于它位于我的.gitignore ,因此它从未被回购的其余部分推高。

因为heroku在我的代码运行之前就对其进行了解析,所以require('../../config.js')有问题。 它正在尝试查找不存在的文件。

如何解决部署时使用环境变量以及本地运行时使用config.js模块的问题?

在您的应用程序的Heroku仪表板上,可以设置配置变量。 如果您在计算机上设置了Heroku Toolbelt,则还可以使用:

heroku config:set API_SECRET=secret

有关更多信息,请参见本文

编辑:认为我可能误解了这个问题。 我建议,如果可能的话,请使用dotenv npm软件包在本地设置配置变量。

如果不是,则要检查的另一件事是config.js包位于package.json文件中,因为Heroku将使用它来构建依赖项。

如果您根本不想将config.js推为英雄,则可以按照以下步骤使用try catch和文件系统模块来确定配置文件是否存在:

同步检查Node.js中是否存在文件/目录

在您的情况下:

var fs = require('fs'),
    api_secret,
    config;

try {
    // Check whether config.js exists
    config = fs.lstatSync('../../config.js');
    // If we reach this line then config.js exists, yay!
    api_secret = process.env.API_SECRET || require('../../config.js').secret;
    // or alternatively  api_secret = require('../../config.js').secret; 
    // depending on your logic

}
catch (e) {
    // else config.js does not exist
    api_secret = process.env.API_SECRET
}

要以编程方式运行Heroku命令,您可以设置一个免费的Ruby应用程序,并通过API调用使其执行所需的操作。 使用Heroku-api。 参见https://github.com/heroku/heroku.rb

如果要手动设置Heroku命令,则可以使用命令heroku config:set MYVAR=MYVALUE或通过Heroku仪表板在Heroku上设置环境变量(单击应用程序>设置>显示配置变量>编辑)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM