สมมติว่ามีเซิร์ฟเวอร์ MongoDB ที่ใช้งานอยู่สำหรับไคลเอนต์ GUI (โดยwxPython ) มาระยะหนึ่งแล้ว
ฉันจะเชื่อมต่อโครงการ Meteor ใหม่ของฉันกับ MongoDB ที่มีอยู่แล้วได้อย่างไร
สมมติว่ามีเซิร์ฟเวอร์ MongoDB ที่ใช้งานอยู่สำหรับไคลเอนต์ GUI (โดยwxPython ) มาระยะหนึ่งแล้ว
ฉันจะเชื่อมต่อโครงการ Meteor ใหม่ของฉันกับ MongoDB ที่มีอยู่แล้วได้อย่างไร
คำตอบ:
ใช้ตัวแปรสภาพแวดล้อม MONGO_URL สิ่งที่ต้องการ:
export MONGO_URL=mongodb://localhost:27017/your_db
แทนที่your_db
ด้วยmeteor
หรืออะไรก็ได้ที่คุณต้องการใช้
export MONGO_URL=mongodb://localhost:27017/my_database_name
จะใส่ข้อมูลในฐานข้อมูลชื่อmy_database_name
. export MONGO_URL=mongodb://localhost:27017/meteor
เขาหมายถึงว่าถ้าคุณต้องการคุณสามารถทำ ฉันขอแนะนำให้ตั้งชื่อฐานข้อมูลของคุณให้เหมือนกับโครงการของคุณ
เราใช้npm
:
สร้างpackage.json
ไฟล์ด้วยnpm init
หากคุณยังไม่มี
ป้อนและแก้ไขบรรทัดต่อไปนี้ในไฟล์นั้น (แทนที่ทั้งหมด<...>
):
"scripts": {"meteor": "MONGO_URL=mongodb://<USER>:<PASSWORD>@<SERVER>:<PORT>/<DB> meteor"}
npm run meteor
ในความคิดเห็นต่อคำตอบของ Danny Tom Wijsman แนะนำให้แพทช์แพ็กเกจ / mongo-liveata / mongo_driver.js บรรทัดที่ 21 สถานที่ที่ดีกว่าอยู่ใน app /eor / run.js บรรทัด 460 วิธีนี้ตัวแปรสภาพแวดล้อมยังคงถูกเลือกหากมีอยู่ เช่นเมื่อเรียกใช้ Meteor บน Heroku เพียงแค่เปลี่ยน mongodb รหัสแข็งเริ่มต้น: //127.0.0.1 เป็นตำแหน่งของเซิร์ฟเวอร์ MongoDB ของคุณ
คุณสามารถใช้ db.copyDatabase เพื่อทำสิ่งนี้โดยมีข้อแม้ว่ามีจุดบกพร่องและคุณไม่สามารถอัปเดตข้อมูลใน Meteor ได้ ดูhttps://github.com/meteor/meteor/issues/61
หากคุณใช้ Meteor เวอร์ชันพัฒนาคุณสามารถถ่ายโอนข้อมูลจากเซิร์ฟเวอร์ MongoDB ที่ใช้งานอยู่โดยเริ่มแอป Meteor จากนั้นทำดังนี้
mongo --port 3002
สิ่งนี้จะเชื่อมต่อคุณกับเซิร์ฟเวอร์ Mongo ของแอพ Meteor ตอนนี้ใช้ db.copyDatabase ดังนี้:
db.copyDatabase('myappDatabase', 'meteor', 'localhost');
ซึ่งจะคัดลอกฐานข้อมูล myappDatabase จากเซิร์ฟเวอร์ MongoDB ที่ทำงานบนพอร์ตมาตรฐานบน localhost ไปยังเซิร์ฟเวอร์ Mongo ของแอป Meteor ชื่อฐานข้อมูลที่แอพ Meteor ใช้คือ 'ดาวตก'
เพียงคัดลอกข้อมูลไปยังฐานข้อมูล Meteor MongoDB - ไม่มีเหตุผลที่จะพยายามเชื่อมโยง Meteor เข้ากับฐานข้อมูลที่มีอยู่และเสี่ยงต่อการเขียนทับสิ่งต่างๆ
ใช้mongoexport
เพื่อถ่ายโอนคอลเล็กชันของคุณทีละรายการจากนั้นmongoimport
นำเข้าไฟล์ไปยังฐานข้อมูลที่มีชื่อmeteor
ในอินสแตนซ์ Meteor MongoDB อินสแตนซ์ดาวตก MongoDB ทำงานบนพอร์ต 3002 กับ bind_address 127.0.0.1 .meteor/local/db
และไฟล์ข้อมูลที่อยู่ในโครงการไดเรกทอรีย่อยดาวตก
ดูเอกสารหากคุณไม่คุ้นเคยกับการนำเข้า / ส่งออกใน MongoDB
app/lib/mongo_runner.js
ตัดสินใจว่าจะเปิดใช้งานอย่างไร (คุณอาจไม่จำเป็นต้องใช้รหัสเปิดตัวด้วยซ้ำดังนั้นดูวิธีปิดใช้งาน) การเชื่อมต่อดูเหมือนจะเกิดขึ้นภายในpackages/mongo-livedata/mongo_driver.js
ฉันคิดว่าคุณสามารถเปลี่ยนพารามิเตอร์ url ในบรรทัดที่ 21 ได้หากคุณต้องการทราบค่าของมันให้แทรกconsole.log(url);
ในบรรทัดก่อนหน้านั้นรีสตาร์ท Meteor และดูเอาต์พุต Meteor ของคุณอย่างใกล้ชิด ตรวจสอบให้แน่ใจว่าคุณโทรหา Meteor ครั้งเดียวในแอพของคุณเพื่อให้มันทริกเกอร์ ...
console.log(url);
และได้รับข้อมูล! ฉันจะแนะนำให้คุณทำสิ่งนี้ให้สมบูรณ์เป็นคำตอบในการแก้ไขปัญหาเพราะฉันเชื่อว่ามันให้ความช่วยเหลือแก่ชุมชนหรืออย่างน้อยคนอย่างฉันก็ยังไม่คุ้นเคยกับดาวตก ~
สิ่งที่ฉันทำคือเพิ่ม IP ของเซิร์ฟเวอร์ Digital ocean droplet ของฉันแทนที่จะเป็น localhost และใช้งานได้:
env: {
ROOT_URL: 'http://yourdomain.com',
MONGO_URL: 'mongodb://104.236.24.66:27017/meteor',
PORT: 3002,
},
แก้ไข: ใช้ MUP เพื่อปรับใช้โครงการดาวตกของคุณ: https://github.com/zodern/meteor-up
env: {
ROOT_URL: 'https://www.example.com',
MONGO_URL: 'mongodb://localhost/meteor',
},
Mup ใช้ Docker และจะ "เชื่อมโยง" คอนเทนเนอร์ทั้ง 2 ของคุณจึงโฮสต์ทั้งแอปและ mongo บน VM (เซิร์ฟเวอร์) เดียวกัน mongoDB ของคุณไม่ควรเข้าถึงจาก IP สาธารณะด้วยเหตุผลด้านความปลอดภัย
ใช้เวลามากและพบว่าต้องใช้เครื่องหมายคำพูดรอบ ๆ URL:
export MONGO_URL='mongodb://localhost/meteor'
export MONGO_OPLOG_URL='op log url'
คุณต้องให้แอปของคุณทำงานในหน้าต่างเทอร์มินัลเดียวจากนั้นเปิดอีกหน้าต่างหนึ่งแล้วพิมพ์คำว่า "ดาวตก" ก็น่าจะใช้ได้!