sails-postgresql "poolSize" слишком высокая ошибка при подключении к базе данных, работающей в контейнере Docker - PullRequest
0 голосов
/ 08 ноября 2018

Я создаю новое приложение Sails.js, которое подключается к базе данных PostgreSQL. Приложение раньше нормально работало, пока я не создал новую модель, используя sails generate model products. Теперь я сталкиваюсь со следующей ошибкой при попытке запуска приложения:

server_1      | [nodemon] starting `node app.js`
server_1      |  info: ·• Auto-migrating...  (alter)
server_1      |  info:    Hold tight, this could take a moment.
server_1      | Troubleshooting tips:
server_1      |
server_1      |  -> Is your Postgresql configuration correct?  Maybe your `poolSize` configuration is set too high? e.g. If your Postgresql database only supports 20 concurrent connections, you should make sure you have your `poolSize` set as something < 20 (see http://stackoverflow.com/a/27387928/486547). The default `poolSize` is 10. To override default settings, specify the desired properties on the relevant Postgresql "connection" config object where the host/port/database/etc. are configured. If you're using Sails, this is generally located in `config/datastores.js`, or wherever your environment-specific database configuration is set.
server_1      |
server_1      |  -> Maybe your `poolSize` configuration is set too high? e.g. If your Postgresql database only supports 20 concurrent connections, you should make sure you have your `poolSize` set as something < 20 (see http://stackoverflow.com/a/27387928/486547). The default `poolSize` is 10.
server_1      |
server_1      |  -> Do you have multiple Sails instances sharing the same Postgresql database? Each Sails instance may use up to the configured `poolSize` # of connections. Assuming all of the Sails instances are just copies of one another (a reasonable best practice) we can calculate the actual # of Postgresql connections used (C) by multiplying the configured `poolSize` (P) by the number of Sails instances (N). If the actual number of connections (C) exceeds the total # of **AVAILABLE** connections to your Postgresql database (V), then you have problems.  If this applies to you, try reducing your `poolSize` configuration. A reasonable `poolSize` setting would be V/N.

В ответ на эту ошибку я добавил ключ poolSize в свой файл datastores.js, например:

module.exports.datastores = {

  default: {
    adapter: 'sails-postgresql',
    url: 'postgresql://postgres@postgresql:5432/web-service',
    poolSize: 1
  },
};

По-прежнему выдает ту же ошибку. И приложение, и база данных работают в среде Docker. Вот как выглядит мой docker-compose.yml:

version: '3.4'

services:
  server:
    image: web-service
    build: .
    environment:
      NODE_ENV: development
      IS_DEV_MACHINE: "yes"
    ports:
      - 1338:1337 # HOST_PORT is 1338 to avoid conflicts with other Sails.js apps running on host
    volumes:
      - ../:/usr/src/app
    entrypoint: nodemon

  postgresql:
    image: bitnami/postgresql:9.6
    ports:
      - 5433:5432 # HOST_PORT is 5433 to avoid conflicts with other PostgreSQL instances running on host
    volumes:
      - ../database:/bitnami

Кажется, я нигде не могу найти решение этой проблемы. Другие темы StackOverflow на эту тему не отвечали более года. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 08 ноября 2018

Мне удалось устранить ошибку, переключившись с bitnami: postgresql: 9.6 Изображение Docker на postgres: 9.6. По-видимому, postgres: 9.6 принимает 100 соединений (что больше, чем принимает изображение Bitnami). Sails больше не выдает ошибку poolSize, даже если я удаляю poolSize: 1 из datastores.js. Так выглядит мой файл docker-compose.yml

version: '3.4'

services:
  server:
    image: web-service
    build: .
    environment:
      NODE_ENV: development
      IS_DEV_MACHINE: "yes"
    ports:
      - 1338:1337 # HOST_PORT is 1338 to avoid conflicts with other Sails.js apps running on host
    volumes:
      - ../:/usr/src/app
    entrypoint: nodemon

  postgresql:
    image: postgres:9.6
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: admin
    ports:
      - 5433:5432 # HOST_PORT is 5433 to avoid conflicts with other PostgreSQL instances running on host
    volumes:
      - ../database:/var/lib/postgresql/data
...