如何为herokuPR审查应用程序自动添加所需的strapi(postgres)配置变量



使用postgres插件在heroku上部署strapi时,strapi需要为数据库连接配置设置单独的配置变量,而不仅仅是DATABASE_URL。我已经设置好了,一切都很好。问题是在heroku管道中使用评论应用程序功能。我无法为所有审查应用程序设置静态配置变量,因为每次创建审查应用程序时,Heroku都会提供postgres插件的新实例,因此审查应用程序会获得新的DATABASE_URL。我倾向于使用根app.json文件来指定一个脚本,该脚本将读取自动生成的DATABASE_URL配置变量,并将其拆分并设置strapi所需的配置变量。这是最好和/或唯一的方法吗?脚本应该是什么生命周期的一部分?它会是一个bash脚本吗?如何读取和拆分DATABASE_URL?谢谢,

我设法弄明白了。。。我基本上是在实际问题中回答的。

-转到帐户设置并获取您的HEROKU_API_TOKEN。-将其作为配置变量添加到管道中。-在根目录中创建一个app.json文件,该文件继承HEROKU_API_TOKEN和HEROKU_app_NAME配置变量。你需要把它写在剧本里。-设置要在postdeploy事件中运行的脚本。

您的app.json应该具有以下基本结构:

{
"environments": {
"review": {
"scripts": {
"postdeploy": "node ./postdeployReviewapp.js"
},
"addons": [
"heroku-postgresql:hobby-dev"
]
}
},
"env":{
"HEROKU_APP_NAME": {
"required": true
},
"HEROKU_API_TOKEN":{
"required":true
}
}
}

-然后创建脚本。。。您的脚本应该读取自动生成的databaseurl,并将其拆分以获得各个dbconnection变量。-向heroku平台api-config-vars端点发出补丁请求,在主体中传递dbconnection变量。

你的节点脚本应该是这样的:

const https = require('https');
const url = require('url');
/**
* eg. DATABASE_URL = postgres://ebitxebvixeeqd:dc59b16dedb3a1eef84d4999sb4baf@ec2-50-37-231-192.compute-2.amazonaws.com: 5432/d516fp1u21ph7b
* It's read like so: postgres:// USERNAME : PASSWORD @ HOST : PORT : DATABASE_NAME
*/
let settings = {
client: 'postgres'
};
const parsed = url.parse(process.env.DATABASE_URL, true);
const [username, password] = parsed.auth.split(':');
settings.host = parsed.hostname;
settings.port = Number(parsed.port);
settings.database = parsed.pathname.substr(1);
settings.username = username;
settings.password = password;
settings.ssl = (parsed.query.ssl === 'true');
var options = {
'method': 'PATCH',
'hostname': 'api.heroku.com',
'path': '/apps/' + process.env.HEROKU_APP_NAME + '/config-vars',
'headers': {
'Content-Type': 'application/json',
'Accept': 'application/vnd.heroku+json; version=3',
'Authorization': 'Bearer ' + process.env.HEROKU_API_TOKEN
}
};
var req = https.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function (chunk) {
var body = Buffer.concat(chunks);
console.log(body.toString());
});
res.on("error", function (error) {
console.error(error);
});
});
var postData = JSON.stringify(
{
"DATABASE_USERNAME": settings.username,
"DATABASE_PASSWORD": settings.password,
"DATABASE_HOST": settings.host,
"DATABASE_PORT": settings.port,
"DATABASE_NAME": settings.database
});
req.write(postData);
req.end();

您的评论应用程序现在应该有新的配置变量,strapi将使用这些变量连接到postgres。

最新更新