问题描述
我有一个Go应用程序,该应用程序使用Cloud(Heroku)上的Postgres DB并将DB Url设置为根据准则调用Heroku CLI的环境变量。
因此可以使用命令启动该应用
DATABASE_URL=$(heroku config:get DATABASE_URL -a my-db) my-app
现在,我想在调试模式下从VSCode中启动应用程序,但是我找不到在调试开始之前设置DATABASE_URL
变量的正确方法。我已经尝试过preLaunchTask
,但没有成功。我与preLaunchTask
一起使用的配置是这些
launch.json
{
"version": "0.2.0","configurations": [
{
"name": "Launch","type": "go","request": "launch","mode": "auto","preLaunchTask": "setPostgresDbUrl","program": "${fileDirname}","env": {},"args": []
}
]
}
tasks.json
{
"version": "2.0.0","tasks": [
{
"label": "setPostgresDbUrl","type": "shell","command": "bash ./setUrl.sh"
}
]
}
setUrl.sh
#!/usr/bin/env bash
DATABASE_URL=$(heroku config:get DATABASE_URL -a go-batch)
解决方法
我已经能够以稍微不同的方式解决这个问题,即使用 .env
文件来设置从中读取 url 的环境变量。
所以,在项目的根文件夹中,我有一个像这样的 .env
文件
the url may change - to get the current url run the command
# echo $(heroku config:get DATABASE_URL -a go-batch)
DATABASE_URL=postgres://blah-blah-1.eu-west-1.compute.amazonaws.com:5432/blah
然后在 launch.json
中我指定读取这样的环境变量值
{
"version": "0.2.0","configurations": [
{
"name": "LaunchGo","type": "go","request": "launch","mode": "auto",//"preLaunchTask": "setPostgresDbUrl","program": "${fileDirname}","envFile": "${workspaceFolder}/.env","args": []
}
]
}