johnykim Δημοσ. 24 Αυγούστου 2023 Δημοσ. 24 Αυγούστου 2023 (επεξεργασμένο) Καλησπέρα. Σε ένα NextJS project χρησιμοποιώ MongoDB Atlas, ένα cloud database service. Θα ήθελα να χρησιμοποιώ τη βάση τοπικά, και έτσι κατέβασα την MongoDB και το Compass UI. Το DATABASE_URL από το .env file με το Atlas, είναι αυτό: DATABASE_URL="mongodb+srv://username:[email protected]/test" , με test το όνομα της βάσης. Η λύση φαίνεται να είναι συγκεκριμένη, εδώ: https://stackoverflow.com/questions/73570090/prisma-mongodb-replica-set Λέει δηλαδή να κάνω: 1) pull ένα docker image (https://hub.docker.com/r/prismagraphql/mongo-single-replica/tags), και να τρέξω ένα container. 2) Να τρέξω το image έτσι: docker run --name mongo -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME="john" -e MONGO_INITDB_ROOT_PASSWORD="pass" -d prismagraphql/mongo-single-replica:5.0.3 3) Να χρησιμοποιήσω το DATABASE_URL="mongodb://john:pass@localhost:27017/db_name?authSource=admin&directConnection=true" Το σχήμα το ανεβάζω επιτυχώς: npx prisma db push . Η εφαρμογή ξεκινά, αλλά όταν πάω να κάνω κάποια ενέργεια, πχ να κάνω register έναν χρήστη, παίρνω το παρακάτω log: Prisma needs to perform transactions, which requires your MongoDB server to be run as a replica set. https://pris.ly/d/mongodb-replica-set at Hr.handleRequestError (C:\Repos\booking-system\node_modules\@prisma\client\runtime\library.js:122:6999) at Hr.handleAndLogRequestError (C:\Repos\booking-system\node_modules\@prisma\client\runtime\library.js:122:6388) at Hr.request (C:\Reposs\booking-system\node_modules\@prisma\client\runtime\library.js:122:6108) at async l (C:\Repos\booking-system\node_modules\@prisma\client\runtime\library.js:126:10298) at async POST (webpack-internal:///(rsc)/./app/api/register/route.ts:16:18) at async eval (webpack-internal:///(rsc)/./node_modules/next/dist/server/future/route-modules/app-route/module.js:254:37) { code: 'P2031', clientVersion: '5.1.1', meta: {} } Άλλη λύση που βρήκα, είναι να τρέξω το image έτσι: docker run --name mongo -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME="john" -e MONGO_INITDB_ROOT_PASSWORD="pass" -d prismagraphql/mongo-single-replica:5.0.3 --replSet rs0 Και από το project, να ανεβάσω το σχήμα, έτσι: DATABASE_URL="mongodb://john:pass@localhost:27017/?authSource=admin&replicaSet=rs0" Σε αυτή τη περίπτωση Α) Το container μετά από λίγο σταματάει, και Β) το σχήμα δεν γίνεται push: The provided database string is invalid. An invalid argument was provided: Database must be defined in the connection string in database URL. Please refer to the documentation in https://www.prisma.io/docs/reference/database-reference/connection-urls for constructing a correct connection string. In some cases, certain characters must be escaped. Please check the string for any illegal characters. Γνωρίζει κάποιος πως να φτιάξω σωστά το container; Δεν έχω ασχοληθεί ξανά με docker. Αν φυσικά ξέρει κάποιος άλλον τρόπο για να χρησιμοποιεί τοπικά την MongoDB, ακόμα καλύτερα! Επεξ/σία 24 Αυγούστου 2023 από johnykim
Xvipes Δημοσ. 24 Αυγούστου 2023 Δημοσ. 24 Αυγούστου 2023 Δεν είμαι στο pc τώρα αλλά νομίζω πιο γρήγορο θα είναι να κάνεις μια dev βάση στο atlas που δίνει αν θυμάμαι καλά 500mb free και να παίξεις έτσι.
johnykim Δημοσ. 24 Αυγούστου 2023 Μέλος Δημοσ. 24 Αυγούστου 2023 Έτσι το κάνω τώρα, αλλά θα ήθελα να την έχω τοπικά για καλύτερη ταχύτητα και πιο εύκολες δοκιμές.
Ponous Δημοσ. 25 Αυγούστου 2023 Δημοσ. 25 Αυγούστου 2023 5 ώρες πριν, johnykim είπε Δεν έχω ασχοληθεί ξανά με docker Δεν είναι απαραίτητο να χρησιμοποιήσεις docker. Όταν δοκίμασα μια φορά την mongo το είχα κάνει χωρίς docker. Έτσι κι αλλιώς αν δεν χρησιμοποιείς docker και στα υπόλοιπα αμφιβάλλω αν θα σε βοηθήσει κάπου στο πρότζεκτ σου. 5 ώρες πριν, johnykim είπε Αν φυσικά ξέρει κάποιος άλλον τρόπο για να χρησιμοποιεί τοπικά την MongoDB, ακόμα καλύτερα! Εγώ θα πήγαινα σε αυτό τον οδηγό. Θα σε συμβούλευα να αποφύγεις επιλογές τρίτων για UI για αρχή. Εγκατέστησε την mongo και τρέξε την από το terminal/cmd. Είναι πιο εύκολο και δεν υπάρχουν πολλά περιθώρια λάθους. 5 ώρες πριν, johnykim είπε Και από το project, να ανεβάσω το σχήμα, έτσι: DATABASE_URL="mongodb://john:pass@localhost:27017/?authSource=admin&replicaSet=rs0" 5 ώρες πριν, johnykim είπε Β) το σχήμα δεν γίνεται push Τι εννοείς στο σχήμα; Εννοείς το .env αρχείο; Το .env δεν πρέπει να το κάνεις push! Μόνο στο .env.example ή .env.development πρέπει να προσθέσεις την αλλαγή σου. Δεν σε αφήνει να το κάνεις push (και καλά κάνει) διότι είναι στο .gitignore αρχείο. Ό,τι έχεις εκεί μέσα δεν γίνεται push.
Xvipes Δημοσ. 25 Αυγούστου 2023 Δημοσ. 25 Αυγούστου 2023 Αυτό το τσέκαρες https://github.com/prisma/prisma/issues/8266#issuecomment-966618742 ;
hawkpilot Δημοσ. 25 Αυγούστου 2023 Δημοσ. 25 Αυγούστου 2023 Αν δεν κάνω λάθος, από την mongo 5 και πάνω, το setup πρέπει να περιλαμβάνει replicas ακόμα κι αν είναι μόνο ένα. Ξεκίνα τον server μέσα στο container με την παράμετρο --replSet "rs0", συνδέσου μέσω ssh στο container και μετά στη mongo σαν admin και εκτέλεσε rs.initiate().ok και rs.status().ok. Λογικά θα κάνει αρχικοποίηση στο replication και θα σου λύσει το πρόβλημα.
johnykim Δημοσ. 31 Αυγούστου 2023 Μέλος Δημοσ. 31 Αυγούστου 2023 Ευχαριστώ για τις απαντήσεις. Λόγω χρόνου, δεν έχω επιχειρήσει να δοκιμάσω τίποτα. Δουλεύω απλά το cluster του Ατλα μέσα από το compass για μεγαλύτερη ευκολία. Θα ενημερώσω αν δοκιμάσω κάτι άλλο.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα