我最近将一个React/Express应用部署到了Heroku,但是我遇到了一个问题:环境变量被包含在构建后的应用和Heroku部署管道中,简而言之,在将应用程序从staging
发布到production
时环境变量的值会被继承 - 我唯一能让环境变量正确设置的方式就是直接将应用程序推送到production
,这实际上完全背离了部署管道的初衷。以下是情况概述:
所涉及的环境变量为API_URL
,在webpack.config.js
中如下所示:
plugins: [
new webpack.DefinePlugin({
'API_URL': JSON.stringify(process.env.API_URL || 'http://localhost:4000/api/v1')
})
]
API是另一个Heroku应用程序,具有“staging”和“production”版本。因此,在我的React应用程序的Heroku配置中设置了API_URL环境变量的值,分别为“https://staging-api-12345.herokuapp.com/api/v1”和“https://production-api-12345.herokuapp.com/api/v1”。当我将React应用程序推送到“staging”时,它可以完美运行。但是,当我将应用程序提升到“production”并进行第一次API调用时,它仍然指向“https://staging-api-12345.herokuapp.com/api/v1”。我理解为什么会这样 - 应用程序在被推送到“staging”时已构建...因此,我尝试在提升到“production”之后重新构建应用程序,但是这并没有起作用,它仍然使用了“staging”的环境变量。
在使用Heroku部署管道时,是否有办法强制重新构建应用程序slug,以便它能够捕获不同的环境变量?