Fix streaming API not being usable without `DATABASE_URL` (#23960)

shrike
Eugen Rochko 2023-03-05 01:52:12 +01:00 committed by GitHub
parent ade3c5d40c
commit be1792e1d4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 39 additions and 9 deletions

View File

@ -81,9 +81,10 @@ const startMaster = () => {
log.warn(`Starting streaming API server master with ${numWorkers} workers`); log.warn(`Starting streaming API server master with ${numWorkers} workers`);
}; };
const startWorker = async (workerId) => { /**
log.warn(`Starting worker ${workerId}`); * @return {Object.<string, any>}
*/
const pgConfigFromEnv = () => {
const pgConfigs = { const pgConfigs = {
development: { development: {
user: process.env.DB_USER || pg.defaults.user, user: process.env.DB_USER || pg.defaults.user,
@ -102,16 +103,45 @@ const startWorker = async (workerId) => {
}, },
}; };
let baseConfig;
if (process.env.DATABASE_URL) {
baseConfig = dbUrlToConfig(process.env.DATABASE_URL);
} else {
baseConfig = pgConfigs[env];
if (process.env.DB_SSLMODE) {
switch(process.env.DB_SSLMODE) {
case 'disable':
case '':
baseConfig.ssl = false;
break;
case 'no-verify':
baseConfig.ssl = { rejectUnauthorized: false };
break;
default:
baseConfig.ssl = {};
break;
}
}
}
return {
...baseConfig,
max: process.env.DB_POOL || 10,
connectionTimeoutMillis: 15000,
application_name: '',
};
};
const startWorker = async (workerId) => {
log.warn(`Starting worker ${workerId}`);
const app = express(); const app = express();
app.set('trust proxy', process.env.TRUSTED_PROXY_IP ? process.env.TRUSTED_PROXY_IP.split(/(?:\s*,\s*|\s+)/) : 'loopback,uniquelocal'); app.set('trust proxy', process.env.TRUSTED_PROXY_IP ? process.env.TRUSTED_PROXY_IP.split(/(?:\s*,\s*|\s+)/) : 'loopback,uniquelocal');
const pgPool = new pg.Pool(Object.assign(pgConfigs[env], dbUrlToConfig(process.env.DATABASE_URL), { const pgPool = new pg.Pool(pgConfigFromEnv());
max: process.env.DB_POOL || 10,
connectionTimeoutMillis: 15000,
ssl: !!process.env.DB_SSLMODE && process.env.DB_SSLMODE !== 'disable',
}));
const server = http.createServer(app); const server = http.createServer(app);
const redisNamespace = process.env.REDIS_NAMESPACE || null; const redisNamespace = process.env.REDIS_NAMESPACE || null;