Sail.js несколько подключений при запуске

У меня странная проблема - при запуске моего приложения для парусов (которое подключается к postgres и развертывается на heroku) есть несколько подключений (около 10) к базе данных, и, поскольку это бесплатная учетная запись, если я затем попытаюсь запустить приложение на localhost для проверки нового кода. Я получаю сообщение об ошибке "слишком много соединений для роли". Так кто-нибудь знает, почему так много подключений к базе данных и могу ли я изменить ее, чтобы для каждого приложения было только одно подключение?

РЕДАКТИРОВАТЬ: Ошибка создания подключения к Postgresql: ошибка: слишком много подключений для роли «xwoellnkvjcupt» Ошибка создания подключения к Postgresql: ошибка: слишком много подключений для роли «xwoellnkvjcupt» ошибка: Не удалось загрузить крючок: orm (ошибка: слишком много подключений для роли "xwoellnkv jcupt") ошибка: Ошибка при загрузке ядра Sails! ошибка: ошибка: слишком много подключений для роли «xwoellnkvjcupt» в Connection.parseE (C: \ Studia \ szachman2 \ node_modules \ sails-postgresql \ node _modules \ pg \ lib \ connection.js: 561: 11) в Connection.parseMessage ( C: \ Studia \ szachman2 \ node_modules \ sails-postgresq l \ node_modules \ pg \ lib \ connection.js: 390: 17) с нулевым значением. (C: \ Studia \ szachman2 \ node_modules \ sails-postgresql \ node_ modules \ pg \ lib \ connection.js: 98: 18) в CleartextStream.EventEmitter.emit (events.js: 95: 17) в CleartextStream. (_stream_readable.js: 746: 14) в CleartextStream.EventEmitter.emit (events.js: 92: 17) в emitReadable_ (_stream_readable.js: 408: 10) в _stream_readable.js: 401: 7 в process._tickDomainCallback (node. js: 459: 13)

это ошибка, которую я часто получаю при попытке протестировать новый код на localhost.


person jantar    schedule 09.04.2014    source источник


Ответы (3)


@jantar @ sgress454 Я сообщение об устранении неполадок_а_а_а_а_а_а_а_аpoolSizefcc46018435e1ce3"_ru_diff_a7bcb5fcc46018435e1ce3"_ru_diff_a7bcb5fcc46018435e1ce3" Попробуй сделать это лучше. Вот что там написано:

-> Может быть, ваша poolSize конфигурация слишком высокая? например Если ваша база данных Postgresql поддерживает только 20 одновременных подключений, вы должны убедиться, что ваш poolSize установлен как нечто ‹20. По умолчанию poolSize равно 10.

Чтобы переопределить значение по умолчанию poolSize, укажите свойство poolSize в соответствующем объекте конфигурации Postgresql «соединение». Если вы используете Sails, он обычно находится в config/connections.js или там, где установлена ​​ваша конфигурация базы данных для конкретной среды.

-> У вас есть несколько экземпляров Sails, использующих одну и ту же базу данных Postgresql? Каждый экземпляр Sails может использовать до сконфигурированного poolSize # соединений. Предполагая, что все экземпляры Sails являются просто копиями друг друга (разумная передовая практика), мы можем вычислить фактическое количество используемых соединений Postgresql (C), умножив сконфигурированный poolSize (P) на количество экземпляров Sails (N). Если фактическое количество подключений (C) превышает общее количество ДОСТУПНЫХ подключений к вашей базе данных Postgresql (V), то у вас проблемы. Если это относится к вам, попробуйте уменьшить вашу poolSize конфигурацию. Разумным poolSize параметром будет V / N.

person mikermcneil    schedule 09.12.2014

Это связано с функцией автоматической миграции Sails, которая пытается поддерживать синхронизацию ваших моделей и базы данных. Он не предназначен для использования в производстве. Вы можете отключить автоматическую миграцию для отдельной модели, добавив migrate: safe в определение модели:

module.exports = {
    migrate: 'safe',
    attributes: {...}
}

Вы можете отключить автоматическую миграцию для всех моделей, добавив model конфигурацию, обычно в свой config/locals.js:

module.exports = {

    model: {
        migrate: 'safe'
    },
    environment: 'production',
    ...other local config...
}
person sgress454    schedule 09.04.2014
comment
Он по-прежнему создает 11 соединений, на этот раз с такими запросами: | ВЫБЕРИТЕ n.nspname как схему, c.relname как имя, CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'специальный' WHEN 'f' THEN 'сторонняя таблица' END как тип, pg_catalog.pg_get_userbyid (c.relowner) как владелец, c2.relname как таблица FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n .oid = c.relnamespace LEFT JOIN pg_catalog.pg_index i ON i.indexrelid = c.oid LEFT JOIN pg_cata - person jantar; 09.04.2014
comment
Хм, эти запросы являются частью Waterline, регистрирующего модели. Но ничего не должно вылетать. Я запускаю два экземпляра приложения в бесплатной учетной записи Heroku бок о бок без проблем. Можете ли вы обновить свой вопрос, добавив в журнал вывод, который вы получаете? - person sgress454; 09.04.2014
comment
Он не падает, он просто не позволяет создавать больше соединений, поэтому следующие экземпляры не могут запускаться должным образом. У меня есть еще один вопрос: создается ли одно соединение с базой данных для каждого запроса или для каждого приложения? Потому что, если для каждого запроса, то я думаю, что эта бесплатная база данных heroku не подходит для нашего приложения, потому что это шахматный сервер, поэтому будет сложно играть в несколько игр одновременно. О, и я получу выходной журнал в следующий раз, когда это случится, чтобы показать его здесь. - person jantar; 12.04.2014

Небольшое обновление для V1. Ваш адаптер в config / datastore.js должен выглядеть так, если вы хотите установить максимальный размер для пула соединений:

{
  adapter: 'sails-postgresql',
  url: 'yourconnectionurl',
  max: 1 // This is the important part for poolSize, I set 1 because I don't want more than 1 connection ^^
}

Если вы хотите узнать всю информацию, которую вы можете установить, посмотрите здесь: https://github.com/sailshq/machinepack-postgresql/blob/176413efeab90dc5099dc60718e8b520942ce3be/machines/create-manager.js в строке 162:

// Basic:
        'host', 'port', 'database', 'user', 'password', 'ssl',

        // Advanced Client Config:
        'application_name', 'fallback_application_name',

        // General Pool Config:
        'max', 'min', 'refreshIdle', 'idleTimeoutMillis',

        // Advanced Pool Config:
        // These should only be used if you know what you are doing.
        // https://github.com/coopernurse/node-pool#documentation
        'name', 'create', 'destroy', 'reapIntervalMillis', 'returnToHead',
        'priorityRange', 'validate', 'validateAsync', 'log'
person JosselinTD    schedule 03.03.2019
comment
Спасибо, что поделились! Я не мог найти, где он менял poolSize. Я везде искал. Кажется, это max, как вы указали. - person Noitidart; 16.04.2021