Не удается подключиться к Mongodb из Strapi на Heroku

Я развернул Strapi CMS на Heroku, но получаю эту ошибку

Ошибка подключения к базе данных Mongo. Время ожидания выбора сервера истекло через 30000 мс.

Бревно:

2020-05-27T17:43:55.398256+00:00 heroku[web.1]: Starting process with command `npm start`
2020-05-27T17:43:58.724121+00:00 app[web.1]: 
2020-05-27T17:43:58.724143+00:00 app[web.1]: > [email protected] start /app
2020-05-27T17:43:58.724143+00:00 app[web.1]: > strapi start
2020-05-27T17:43:58.724143+00:00 app[web.1]: 
2020-05-27T17:44:02.234160+00:00 app[web.1]: (node:23) Warning: Accessing non-existent property 'count' of module exports inside circular dependency
2020-05-27T17:44:02.234179+00:00 app[web.1]: (Use `node --trace-warnings ...` to show where the warning was created)
2020-05-27T17:44:02.234732+00:00 app[web.1]: (node:23) Warning: Accessing non-existent property 'findOne' of module exports inside circular dependency
2020-05-27T17:44:02.234879+00:00 app[web.1]: (node:23) Warning: Accessing non-existent property 'remove' of module exports inside circular dependency
2020-05-27T17:44:02.235021+00:00 app[web.1]: (node:23) Warning: Accessing non-existent property 'updateOne' of module exports inside circular dependency
2020-05-27T17:44:32.238852+00:00 app[web.1]: [2020-05-27T17:44:32.238Z] debug ⛔️ Server wasn't able to start properly.
2020-05-27T17:44:32.253150+00:00 app[web.1]: [2020-05-27T17:44:32.253Z] error Error connecting to the Mongo database. Server selection timed out after 30000 ms

Настройки моей среды:

database.js

введите здесь описание изображения

** server.js **

введите здесь описание изображения

** response.js **

введите здесь описание изображения

** конфигурационные переменные **

введите здесь описание изображения

Сайт хорошо работает на localhost как со средой разработки, так и со средой prod. Таким образом, он подключается к MongoDB в Атласе, и с этим нет проблем.

На Heroku не установлены какие-либо дополнения.

** packages.json **

введите здесь описание изображения

На стороне Атласа я открыл все IP-адреса в белом списке.

Любая идея? Спасибо! :)


person podeig    schedule 27.05.2020    source источник
comment
Удалось ли вам решить эту проблему? В настоящее время у меня такая же проблема, и я не могу ее понять.   -  person fraserky    schedule 11.06.2020
comment
Попробуйте изменить в Server.js --- ›Порт 443 заставил его работать. module.exports = ({env}) = ›({хост: env ('HOST', '0.0.0.0'), порт: env.int ('PORT', 443),}); Я могу дать вам свой конфиг, если он не работает.   -  person podeig    schedule 12.06.2020
comment
Спасибо за ответ, но с этим не повезло. Был бы признателен, если бы вы могли поделиться своей конфигурацией, так как я очень смущен, почему это не работает. Моя конфигурация полностью связана с моим собственным вопросом о стеке < / а>   -  person fraserky    schedule 12.06.2020
comment
Сейчас я должен идти. Я отвечу в выходные? :)   -  person podeig    schedule 12.06.2020
comment
Конечно, я ценю, что вы нашли время ответить. Большое спасибо и хорошего дня / выходных :)   -  person fraserky    schedule 12.06.2020
comment
Привет, Фрейзерки, я только что опубликовал свой ответ. Надеюсь, это поможет. ;-)   -  person podeig    schedule 12.06.2020
comment
Потрясающе, спасибо вам огромное! Хороших выходных :)   -  person fraserky    schedule 12.06.2020


Ответы (2)


Моя конфигурация для развертывания Strapi 3.0.1 на Heroku как для среды разработки, так и для производственной среды:

module.exports = ({ env }) => ({
  defaultConnection: "default",
  connections: {
    default: {
      connector: "mongoose",
      settings: {
        uri: env("DATABASE_URI"),
        ssl: { rejectUnauthorized: false }
      },
      options: {
        ssl: true,
        authenticationDatabase: "",
        useUnifiedTopology: true,
        pool: {
          min: 0,
          max: 10,
          idleTimeoutMillis: 30000,
          createTimeoutMillis: 30000,
          acquireTimeoutMillis: 30000
        }
      },
    },
  },
});

server.js

module.exports = ({ env }) => ({
  host: env('HOST', '0.0.0.0'),
  port: env.int('PORT', 443), <-- 443 was critical to make it work on production
});

.env - локальный файл

DATABASE_URI="mongodb+srv://OdegXXXXXUser:[email protected]/odeXXXXXndb?retryWrites=true&w=majority"
HOST="0.0.0.0"
PORT="1337"

Варс на Heroku:

введите здесь описание изображения

DATABASE_URI такой же, как на localhost, та же база данных.

Надеюсь, это кому-нибудь поможет :-)

person podeig    schedule 12.06.2020

сделайте это своим database.json

{
  "defaultConnection": "default",
  "connections": {
    "default": {
      "connector": "mongoose",
      "settings": {
        "client": "mongo",
        "host": "${process.env.DATABASE_HOST}",
        "port": "${process.env.DATABASE_PORT}",
        "database": "${process.env.DATABASE_NAME}",
        "username": "${process.env.DATABASE_USERNAME}",
        "password": "${process.env.DATABASE_PASSWORD}",
      },
      "options": {}
    }
  }
}

Также не забудьте добавить package-lock.json в файл git.ignore. тогда делай

git add .
git commit -m "(message) "
git push heroku master

тогда

heroku open Запустите и серверы приложений.

person Aanyu Deborah O    schedule 04.06.2020