keystonejs / keystone

The superpowered headless CMS for Node.js — built with GraphQL and React
https://keystonejs.com
MIT License
9.3k stars 1.16k forks source link

Since yesterday docker build not working. BaseKeystoneAdapter.postConnect #3397

Closed HitsiLent closed 4 years ago

HitsiLent commented 4 years ago

Bug report

Describe the bug

when we try to production keystone on docker it pops

✖ Connecting to database Error: Multiple errors in BaseKeystoneAdapter.postConnect(): at resolveAllKeys (/home/node/node_modules/@keystonejs/utils/dist/utils.cjs.prod.js:44:95) at async executeDefaultServer (/home/node/node_modules/@keystonejs/keystone/bin/utils.js:114:3) { errors: { MongooseAdapter: Error: Multiple errors in BaseKeystoneAdapter.postConnect(): at MongooseAdapter.connect (/home/node/node_modules/@keystonejs/keystone/lib/adapters/index.js:34:23) at processTicksAndRejections (internal/process/task_queues.js:93:5) at async pReflect (/home/node/node_modules/p-reflect/index.js:5:17) at async Promise.all (index 0) at async resolveAllKeys (/home/node/node_modules/@keystonejs/utils/dist/utils.cjs.prod.js:42:21) at async executeDefaultServer (/home/node/node_modules/@keystonejs/keystone/bin/utils.js:114:3) { errors: [Array] } } } error Command failed with exit code 1.

To Reproduce

docker build -t

Docker build run code below via Dockerfile

https://docs.docker.com/samples/library/node/

ARG NODE_VERSION=12.10.0

https://github.com/Yelp/dumb-init/releases

ARG DUMB_INIT_VERSION=1.2.2

Build container

FROM node:${NODE_VERSION}-alpine AS build ARG DUMB_INIT_VERSION

WORKDIR /home/node

RUN apk add --no-cache build-base python2 yarn && \ wget -O dumb-init -q https://github.com/Yelp/dumb-init/releases/download/v${DUMB_INIT_VERSION}/dumb-init_${DUMB_INIT_VERSION}_amd64 && \ chmod +x dumb-init

ADD . /home/node ENV CI false ENV TZ America/New_York RUN yarn install && yarn build && yarn cache clean

Runtime container

FROM node:${NODE_VERSION}-alpine

WORKDIR /home/node

COPY --from=build /home/node /home/node

EXPOSE 3000

CMD ["./dumb-init", "yarn", "start"]

Expected behaviour

Docker image build successful

docker run --env-file .env -p 3000:3000 should working but got

Screenshots

image

If applicable, add screenshots to help explain your problem.

System information

Additional context

package.json { "name": "@keystonejs/demo-project-meetup", "description": "An example KeystoneJS project showcasing a Meetup Site.", "private": true, "version": "5.0.0", "author": "The KeystoneJS Development Team", "license": "MIT", "engines": { "node": ">=8.4.0" }, "scripts": { "dev": "cross-env NODE_ENV=development DISABLE_LOGGING=true keystone dev ", "build": "cross-env NODE_ENV=production keystone build", "start": "cross-env NODE_ENV=production keystone start" }, "dependencies": { "@apollo/react-hoc": "^3.1.3", "@apollo/react-hooks": "^3.1.3", "@apollo/react-ssr": "^3.1.3", "@babel/plugin-transform-flow-strip-types": "^7.10.4", "@date-io/date-fns": "^2.4.0", "@emotion/core": "^10.0.27", "@keystonejs/adapter-mongoose": "^5.2.2", "@keystonejs/app-admin-ui": "^5.9.2", "@keystonejs/app-graphql": "^5.1.3", "@keystonejs/app-next": "^5.1.1", "@keystonejs/auth-password": "^5.1.2", "@keystonejs/email": "^5.1.1", "@keystonejs/fields": "^7.0.1", "@keystonejs/fields-wysiwyg-tinymce": "^5.2.1", "@keystonejs/file-adapters": "^6.0.0", "@keystonejs/keystone": "^6.0.2", "@keystonejs/session": "^5.1.1", "@material-ui/core": "4.9.4", "@material-ui/icons": "^4.9.1", "@sendgrid/mail": "^7.1.1", "apollo-boost": "^0.4.7", "apollo-client": "^2.6.8", "apollo-fetch": "^0.7.0", "apollo-link": "^1.2.13", "atob": "^2.0.3", "axios": "^0.19.2", "body-parser": "^1.18.2", "btoa": "^1.1.2", "client-oauth2": "^4.2.5", "cookie-parser": "^1.4.5", "cross-env": "^7.0.0", "crypto-js": "^4.0.0", "csrf": "^3.0.4", "date-fns": "^1.30.1", "dotenv": "^8.2.0", "ejs": "^2.5.2", "eslint-plugin-emotion": "^10.0.27", "expect": "^1.20.2", "express": "^4.17.1", "express-basic-auth": "^1.2.0", "express-session": "^1.14.2", "facepaint": "^1.2.1", "fs": "0.0.2", "get-contrast": "^2.0.0", "graphql-tag": "^2.10.1", "https": "^1.0.0", "intuit-oauth": "^2.0.2", "isomorphic-unfetch": "^3.0.0", "jquery": "^3.4.1", "jsforce": "^1.9.3", "jsonwebtoken": "^7.1.9", "lodash": "^4.17.15", "lodash.uniqby": "^4.7.0", "material-table": "1.57.2", "moment": "^2.24.0", "namor": "^2.0.2", "net": "^1.0.2", "next": "^9.2.0", "node-quickbooks": "^2.0.33", "papaparse": "^5.2.0", "path": "^0.12.7", "prop-types": "^15.7.2", "react": "^16.13.0", "react-apollo": "2.4.0", "react-apollo-hooks": "^0.4.4", "react-cookie": "^4.0.3", "react-dom": "^16.13.0", "react-table": "^7.0.0-rc.16", "react-toast-notifications": "^2.3.0", "react-use-form-state": "^0.12.0", "request": "^2.78.0", "rsa-pem-from-mod-exp": "^0.8.4", "tls": "^0.0.1", "twilio": "^3.48.1", "universal-cookie": "^4.0.3", "uuid": "^3.3.2" } }

Add any other context about the problem here.

chalupagrande commented 4 years ago

im getting this error even in development. I updated my package.json and now the adapter-mongoose won't connect when the collections already exist in the database. If I drop the database, the app connects without error.

my package.json

  "dependencies": {
    "@keystonejs/adapter-mongoose": "^9.0.1",
    "@keystonejs/app-admin-ui": "^7.3.0",
    "@keystonejs/app-graphql": "^6.1.0",
    "@keystonejs/app-next": "^5.2.1",
    "@keystonejs/auth-password": "^5.1.13",
    "@keystonejs/fields": "^16.0.0",
    "@keystonejs/file-adapters": "^7.0.2",
    "@keystonejs/keystone": "^13.1.0",
    "@keystonejs/list-plugins": "^7.0.5",
    "@keystonejs/server-side-graphql-client": "^1.1.0",
    "dotenv": "^8.2.0"
  }

when i edit the file to console log the array of issues @HitsiLent mentioned in his bug report I get:

  MongoError: a collection 'john.users' already exists
      at MessageStream.messageHandler (<path-to-project>/node_modules/mongodb/lib/cmap/connection.js:266:20)
      at MessageStream.emit (events.js:223:5)
      at MessageStream.EventEmitter.emit (domain.js:475:20)
      at processIncomingData (<path-to-project>/node_modules/mongodb/lib/cmap/message_stream.js:144:12)
      at MessageStream._write (<path-to-project>/node_modules/mongodb/lib/cmap/message_stream.js:42:5)
      at doWrite (_stream_writable.js:435:12)
      at writeOrBuffer (_stream_writable.js:419:5)
      at MessageStream.Writable.write (_stream_writable.js:309:11)
      at Socket.ondata (_stream_readable.js:728:22)
      at Socket.emit (events.js:223:5)
      at Socket.EventEmitter.emit (domain.js:475:20)
      at addChunk (_stream_readable.js:309:12)
      at readableAddChunk (_stream_readable.js:290:11)
      at Socket.Readable.push (_stream_readable.js:224:10)
      at TCP.onStreamRead (internal/stream_base_commons.js:181:23) {
    ok: 0,
    code: 48,
    codeName: 'NamespaceExists',
    name: 'MongoError'
  }
u007 commented 4 years ago

im facing the same problem, how does one restart the service without hitting this error and still able to work on existing database, especially mongoose adapter?

mwcz commented 4 years ago

@u007 Roll back to a version of your app that worked before the error started occurring.

I'm encountering the same error but haven't tracked down the cause yet. The best clue I've got is that the version of the mongodb package changed from 3.5.10 to 3.6.0. I'm rolling that back to see if it makes any difference.

mwcz commented 4 years ago

Okay, I traced the issue down to the version of mongoose. Mongoose 5.10.0 was published yesterday, and broke @keysonejs/adapter-mongoose.

Here are the changes listed in the mongoose 5.10.0 changelog: https://github.com/Automattic/mongoose/blob/master/History.md#5100--2020-08-14

I don't know enough about keystone to guess which change caused the breakage. Either way, I'd recommend locking the adapter-mongoose dependency on mongoose to 5.9.11 in the meantime, until a long-term fix can be made.

HitsiLent commented 4 years ago

TEMP FIX Before new release,

Dockerfiler add line after RUN yarn install

RUN rm -rf /home/node/node_modules/\@keystonejs/adapter-mongoose/node_modules/mongoose RUN rm -rf node_modules/\@keystonejs/adapter-mongoose/node_modules/mongoose

add "mongoose": "5.9.11" on package.json file

scipe commented 4 years ago

Hey folks. Any update here? I just have the same issue on my local.

timleslie commented 4 years ago

Thanks to all who have reported this bug. We're investigating it this morning and will ship a fix today.