如何为 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。