在Heroku上设置`process.env.commit`

我使用NPM的scripts.postinstall来build立我们的应用程序使用GulpJS时,我们推到Heroku:

 "postinstall": "./node_modules/.bin/gulp build --require coffee-script/register" 

我希望能够在这个时候用提交哈希的值来设置一个环境variables。 这将在文件中被引用为caching,例如:

 <script type="text/javascript" src="/index.{{ process.env.commit }}.js"></script> 

我可以使用git-rev来轻松地asynchronous获取这个值,但我希望它存储在环境级别上。 我如何设置一个自定义的节点环境variables?

如果我这样做是错误的,有一个更好的解决scheme,请让我知道(我只能find方法来设置NODE_ENV而不是process.env对象本身)。

你不能通过postinstall脚本来做到这一点: heroku命令在heroku环境中将不可用。 您可以创build自己的轻量级部署脚本,以便在成功构build时在您的机器上运行该命令:

 #!/bin/sh git push heroku master && heroku config:set COMMIT=$(git rev-parse --short HEAD) 

注意,我直接从Heroku支持得到了这个确认。 这是他们的回应:

slug编译器上没有安装heroku toolbelt。 如果你需要设置一个环境variables作为推送的一部分,那么你必须在你的机器上而不是Heroku编译器上执行。

我find的解决scheme是使用heroku config系统来设置自定义的环境variables:

 git = require "git-rev" exec = require "exec-sync" gulp.task "commit", -> git.long (hash) -> exec "heroku config:set COMMIT=#{ hash }" 

需要进一步testing,但现在它工作(另外,因为命令在服务器上运行,不需要使用heroku config:push )。