Развертывание Typeorm на Heroku - PullRequest
0 голосов
/ 18 марта 2020
{
  "name": "default",
  "type": "postgres",
  "host": "localhost",
  "port": 5432,
  "username": "postgres",
  "password": "PG_PASSWORD",
  "database": "postgres",
  "synchronize": true,
  "logging": true,
  "entities": ["src/entity/*.*"]
}

Это мой ormconfig.json. Таким образом, Heroku, очевидно, выдаёт мне ошибку «Отказ в соединении» в моей базе данных. У меня настроено дополнение Postgres, и у меня есть переменная env DATABASE_URL на моей странице настроек. Если я добавлю DATABASE_URL env,

, мой вопрос: как мне заставить мой ormconfig принять эту переменную env? Потому что сейчас хост, порт и un / pw, et c все разделены, и мне нужно объединить их до одного параметра конфигурации в моем ormconfig.

1 Ответ

0 голосов
/ 27 марта 2020

У вас есть (как минимум) две возможности.

  1. Вы можете создать ConnectionOptions в машинописи, используя переменную окружения DATABASE_URL. Вам не нужны хост, имя пользователя, порт, пароль, база данных, если у вас есть URL-адрес, на самом деле вы должны удалить их, потому что они перезаписывают параметры вашего URL-адреса. См. Здесь: https://typeorm.io/# / параметры подключения / postgres - параметры подключения cockroachdb

    url - URL-адрес подключения, к которому выполняется подключение. Обратите внимание, что другие параметры подключения будут переопределять параметры, установленные из URL.

Например, вот так:

import { getConnectionOptions, ConnectionOptions } from 'typeorm';
import dotenv from 'dotenv';
dotenv.config();

const getOptions = async () => {
  let connectionOptions: ConnectionOptions;
  connectionOptions = {
    type: 'postgres',
    synchronize: false,
    logging: false,
    extra: {
      ssl: true,
    },
    entities: ['dist/entity/*.*'],
  };
  if (process.env.DATABASE_URL) {
    Object.assign(connectionOptions, { url: process.env.DATABASE_URL });
  } else {
    // gets your default configuration
    // you could get a specific config by name getConnectionOptions('production')
    // or getConnectionOptions(process.env.NODE_ENV)
    connectionOptions = await getConnectionOptions(); 
  }

  return connectionOptions;
};

const connect2Database = async (): Promise<void> => {
    const typeormconfig = await getOptions();
    await createConnection(typeormconfig);
};

connect2Database().then(async () => {
    console.log('Connected to database');
});
На heroku вы можете получить учетные данные базы данных в настройках аддона или, конечно же, из URL. Таким образом, вы можете написать ormconfig. json для heroku с этими учетными данными.
{
  "name": "default",
  "type": "postgres",
  "url: "postgres://username:password@hostname:5432/databasename"
  "synchronize": false,
  "logging": true,
  "entities": ["src/entity/*.*"]
}

Мне больше нравится первый вариант, потому что URL-адрес может измениться на heroku, и вам не придется ничего делать в вашем коде / config-файлах.

...