ฉันจะใช้ MongoDB ที่มีอยู่ในโครงการ Meteor ได้อย่างไร


85

สมมติว่ามีเซิร์ฟเวอร์ MongoDB ที่ใช้งานอยู่สำหรับไคลเอนต์ GUI (โดยwxPython ) มาระยะหนึ่งแล้ว

ฉันจะเชื่อมต่อโครงการ Meteor ใหม่ของฉันกับ MongoDB ที่มีอยู่แล้วได้อย่างไร


Dror ( stackoverflow.com/users/460278/dror ) มีคำตอบที่ถูกต้องด้านล่าง: stackoverflow.com/a/12996674/1114274
Mike Graf

ขอบคุณสำหรับความคิดเห็น ฉันรู้ว่าวิธีแก้ปัญหาของ @ Dror นั้นเป็นทางการแทนที่จะเป็นแฮ็ค แต่ฉันได้ให้คำตอบมาก่อนแล้ว ฉันไม่ค่อยแน่ใจว่าการเปลี่ยนแปลง / ปรับปรุง "คำตอบ" เป็นพฤติกรรมที่ดีและอนุญาตหรือไม่?
Drake Guan

"คุณสามารถเปลี่ยนคำตอบที่ยอมรับหรือเพียงแค่ยกเลิกการยอมรับคำตอบเมื่อใดก็ได้" meta.stackexchange.com/a/5235/191226
Mike Graf

1
ขอบคุณมากที่ชี้เรื่องนี้ให้ฉัน ตอนนี้ฉันมั่นใจมากขึ้น
Drake Guan

คำตอบ:


157

ใช้ตัวแปรสภาพแวดล้อม MONGO_URL สิ่งที่ต้องการ:

export MONGO_URL=mongodb://localhost:27017/your_db

แทนที่your_dbด้วยmeteorหรืออะไรก็ได้ที่คุณต้องการใช้


4
ผมติดอยู่. คุณช่วยอธิบายวิธีแทนที่ your_db ด้วย "ดาวตก" ได้
ไหม

3
โปรดทราบว่าสิ่งนี้จะใช้ไม่ได้กับ prod หากนำไปใช้กับดาวตก - ดูstackoverflow.com/questions/21971036/…
maxko87

2
@SurjithSM export MONGO_URL=mongodb://localhost:27017/my_database_nameจะใส่ข้อมูลในฐานข้อมูลชื่อmy_database_name. export MONGO_URL=mongodb://localhost:27017/meteorเขาหมายถึงว่าถ้าคุณต้องการคุณสามารถทำ ฉันขอแนะนำให้ตั้งชื่อฐานข้อมูลของคุณให้เหมือนกับโครงการของคุณ
Benjamin Crouzier

1
สามารถทำได้ด้วยไฟล์คอนฟิกบางไฟล์หรือไม่? ลองใช้ settings.json แล้วไม่ได้ผล
Kostanos

1
สิ่งนี้ทำให้แฮ็คออกจากแอปในพื้นที่ของฉัน
Deborah

14

เราใช้npm:

  • สร้างpackage.jsonไฟล์ด้วยnpm initหากคุณยังไม่มี

  • ป้อนและแก้ไขบรรทัดต่อไปนี้ในไฟล์นั้น (แทนที่ทั้งหมด<...>):

"scripts": {"meteor": "MONGO_URL=mongodb://<USER>:<PASSWORD>@<SERVER>:<PORT>/<DB> meteor"}
  • จากนั้นคุณสามารถเริ่มดาวตกได้เพียงnpm run meteor

"MONGO_URL" ไม่ได้รับการยอมรับว่าเป็นคำสั่งภายในหรือภายนอก
อับดุลฮามีด

1
เป็นตัวแปรสภาพแวดล้อมตรวจสอบให้แน่ใจว่าไม่มีช่องว่างรอบเครื่องหมาย =
malix

9

ในความคิดเห็นต่อคำตอบของ Danny Tom Wijsman แนะนำให้แพทช์แพ็กเกจ / mongo-liveata / mongo_driver.js บรรทัดที่ 21 สถานที่ที่ดีกว่าอยู่ใน app /eor / run.js บรรทัด 460 วิธีนี้ตัวแปรสภาพแวดล้อมยังคงถูกเลือกหากมีอยู่ เช่นเมื่อเรียกใช้ Meteor บน Heroku เพียงแค่เปลี่ยน mongodb รหัสแข็งเริ่มต้น: //127.0.0.1 เป็นตำแหน่งของเซิร์ฟเวอร์ MongoDB ของคุณ


4

คุณสามารถใช้ 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 ใช้คือ 'ดาวตก'


2

เพียงคัดลอกข้อมูลไปยังฐานข้อมูล Meteor MongoDB - ไม่มีเหตุผลที่จะพยายามเชื่อมโยง Meteor เข้ากับฐานข้อมูลที่มีอยู่และเสี่ยงต่อการเขียนทับสิ่งต่างๆ

ใช้mongoexportเพื่อถ่ายโอนคอลเล็กชันของคุณทีละรายการจากนั้นmongoimportนำเข้าไฟล์ไปยังฐานข้อมูลที่มีชื่อmeteorในอินสแตนซ์ Meteor MongoDB อินสแตนซ์ดาวตก MongoDB ทำงานบนพอร์ต 3002 กับ bind_address 127.0.0.1 .meteor/local/dbและไฟล์ข้อมูลที่อยู่ในโครงการไดเรกทอรีย่อยดาวตก

ดูเอกสารหากคุณไม่คุ้นเคยกับการนำเข้า / ส่งออกใน MongoDB


นั่นหมายความว่าเราควรส่งโฮสติ้ง mongodb ไปยังดาวตกแทนที่จะโฮสต์ด้วยวิธีอื่นหรือไม่?
Drake Guan

2
@Drake: เว้นแต่คุณจะปรับ Meteor ให้ทำงานกับฐานข้อมูลของคุณได้ app/lib/mongo_runner.jsตัดสินใจว่าจะเปิดใช้งานอย่างไร (คุณอาจไม่จำเป็นต้องใช้รหัสเปิดตัวด้วยซ้ำดังนั้นดูวิธีปิดใช้งาน) การเชื่อมต่อดูเหมือนจะเกิดขึ้นภายในpackages/mongo-livedata/mongo_driver.jsฉันคิดว่าคุณสามารถเปลี่ยนพารามิเตอร์ url ในบรรทัดที่ 21 ได้หากคุณต้องการทราบค่าของมันให้แทรกconsole.log(url);ในบรรทัดก่อนหน้านั้นรีสตาร์ท Meteor และดูเอาต์พุต Meteor ของคุณอย่างใกล้ชิด ตรวจสอบให้แน่ใจว่าคุณโทรหา Meteor ครั้งเดียวในแอพของคุณเพื่อให้มันทริกเกอร์ ...
Tamara Wijsman

@Drake: ถ้าคุณต้องการให้ฉันแสดงความคิดเห็นเป็นคำตอบ (ถ้ามันได้ผลสำหรับคุณ) โปรดแจ้งให้เราทราบ
Tamara Wijsman

@TomWijsman: ฉันพยายามconsole.log(url);และได้รับข้อมูล! ฉันจะแนะนำให้คุณทำสิ่งนี้ให้สมบูรณ์เป็นคำตอบในการแก้ไขปัญหาเพราะฉันเชื่อว่ามันให้ความช่วยเหลือแก่ชุมชนหรืออย่างน้อยคนอย่างฉันก็ยังไม่คุ้นเคยกับดาวตก ~
Drake Guan

ใช้ mongochef เพื่อคัดลอกและวางข้อมูลได้ง่ายกว่ามากแทนที่จะใช้คำสั่งส่งออก / นำเข้า 3t.io/mongochef
Max Hodges

0

สิ่งที่ฉันทำคือเพิ่ม 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 สาธารณะด้วยเหตุผลด้านความปลอดภัย


คุณเพิ่มสิ่งนี้ไว้ที่ไหน
Gaurav Arya

เป็นการปฏิบัติที่ไม่ดีจริง ๆ ในการใช้ IP สาธารณะของ VM ของคุณสำหรับ mongoDB ฉันจะอัปเดตคำตอบของฉันเพื่อใช้ localhost
Milean

0

ใช้เวลามากและพบว่าต้องใช้เครื่องหมายคำพูดรอบ ๆ URL:

export MONGO_URL='mongodb://localhost/meteor'
export MONGO_OPLOG_URL='op log url'

-6

คุณต้องให้แอปของคุณทำงานในหน้าต่างเทอร์มินัลเดียวจากนั้นเปิดอีกหน้าต่างหนึ่งแล้วพิมพ์คำว่า "ดาวตก" ก็น่าจะใช้ได้!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.