如何为 heroku pr review 应用程序自动添加所需的 strapi(postgres) 配置变量
how to automatically add the required strapi(postgres) config vars for a heroku pr review app
使用 postgres 附加组件在 heroku 上部署 strapi 时,strapi 需要为数据库连接配置设置单独的配置变量,而不仅仅是 DATABASE_URL。我已经设置好了,一切正常。问题是在 heroku 管道中使用评论应用程序功能。我无法为所有评论应用程序设置静态配置变量,因为每次创建评论应用程序时,Heroku 都会提供一个新的 postgres 插件实例,因此评论应用程序会获得一个新的 DATABASE_URL。我倾向于使用根 app.json 文件来指定一个脚本,该脚本将读取自动生成的 DATABASE_URL 配置变量并将其拆分并设置 strapi 所需的配置变量。这是最好的 and/or 唯一方法吗?脚本应该属于哪个生命周期?它会是一个 bash 脚本吗?我将如何阅读和拆分 DATABASE_URL?
谢谢,
我设法弄明白了...
我基本上在我的实际问题中回答了它。
-转到帐户设置并获取您的 HEROKU_API_TOKEN。
- 将其作为配置变量添加到您的管道中。
- 在继承 HEROKU_API_TOKEN 和 HEROKU_APP_NAME 配置变量的根目录中创建一个 app.json 文件。您在脚本中需要它。
- 在部署后事件中设置您希望 运行 的脚本。
您的 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
}
}
}
-然后创建脚本...
您的脚本应该读入自动生成的 database_url 并将其溢出以获取各个 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。
使用 postgres 附加组件在 heroku 上部署 strapi 时,strapi 需要为数据库连接配置设置单独的配置变量,而不仅仅是 DATABASE_URL。我已经设置好了,一切正常。问题是在 heroku 管道中使用评论应用程序功能。我无法为所有评论应用程序设置静态配置变量,因为每次创建评论应用程序时,Heroku 都会提供一个新的 postgres 插件实例,因此评论应用程序会获得一个新的 DATABASE_URL。我倾向于使用根 app.json 文件来指定一个脚本,该脚本将读取自动生成的 DATABASE_URL 配置变量并将其拆分并设置 strapi 所需的配置变量。这是最好的 and/or 唯一方法吗?脚本应该属于哪个生命周期?它会是一个 bash 脚本吗?我将如何阅读和拆分 DATABASE_URL? 谢谢,
我设法弄明白了... 我基本上在我的实际问题中回答了它。
-转到帐户设置并获取您的 HEROKU_API_TOKEN。 - 将其作为配置变量添加到您的管道中。 - 在继承 HEROKU_API_TOKEN 和 HEROKU_APP_NAME 配置变量的根目录中创建一个 app.json 文件。您在脚本中需要它。 - 在部署后事件中设置您希望 运行 的脚本。
您的 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
}
}
}
-然后创建脚本... 您的脚本应该读入自动生成的 database_url 并将其溢出以获取各个 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。