56 lines
1.4 KiB
JavaScript
Executable File
56 lines
1.4 KiB
JavaScript
Executable File
// knexfile.js
|
|
require('dotenv').config();
|
|
|
|
function must(name) {
|
|
const v = process.env[name];
|
|
if (!v) throw new Error(`${name} não definido no .env`);
|
|
return v;
|
|
}
|
|
|
|
const shared = {
|
|
client: 'pg',
|
|
migrations: {
|
|
directory: './src/db/migrations',
|
|
},
|
|
};
|
|
|
|
function buildConnectionFromEnv() {
|
|
// Se houver DATABASE_URL, usa-o.
|
|
// Se PGSSL=true, aplica ssl no formato esperado pelo driver pg (dentro de connection).
|
|
const ssl =
|
|
process.env.PGSSL === 'true' ? { rejectUnauthorized: false } : undefined;
|
|
|
|
if (process.env.DATABASE_URL) {
|
|
// knex aceita string, mas o ssl precisa estar no objeto:
|
|
return ssl
|
|
? { connectionString: process.env.DATABASE_URL, ssl }
|
|
: process.env.DATABASE_URL;
|
|
}
|
|
|
|
// fallback para vars soltas
|
|
return {
|
|
host: process.env.PGHOST || '127.0.0.1',
|
|
port: Number(process.env.PGPORT || 5432),
|
|
user: process.env.PGUSER || 'postgres',
|
|
password: process.env.PGPASSWORD || 'postgres',
|
|
database: process.env.PGDATABASE || 'evse',
|
|
...(ssl ? { ssl } : {}),
|
|
};
|
|
}
|
|
|
|
module.exports = {
|
|
development: {
|
|
...shared,
|
|
connection: buildConnectionFromEnv(),
|
|
},
|
|
|
|
production: {
|
|
...shared,
|
|
// Em produção normalmente queres obrigar DATABASE_URL (se for o teu caso):
|
|
// connection: must('DATABASE_URL'),
|
|
// Mas mantendo compatível com vars soltas:
|
|
connection: buildConnectionFromEnv(),
|
|
pool: { min: 2, max: 10 },
|
|
},
|
|
};
|