Làm cách nào để sử dụng MongoDB hiện có trong dự án Meteor?


84

Giả sử có một máy chủ MongoDB đang chạy cho một máy khách GUI (bằng wxPython ) trong một thời gian.

Làm cách nào để kết nối dự án Meteor mới với MongoDB đã có của tôi ?


Dror ( stackoverflow.com/users/460278/dror ) có câu trả lời đúng dưới đây: stackoverflow.com/a/12996674/1114274
Mike Graf

Cảm ơn vì đã bình luận. Tôi biết giải pháp của @ Dror là chính thức thay vì hack, nhưng tôi đã chỉ định câu trả lời trước đó. Tôi không chắc liệu việc thay đổi / cập nhật "câu trả lời" có phải là một hành vi tốt và được phép hay không?
Drake Guan

"Bạn có thể thay đổi câu trả lời nào được chấp nhận hoặc đơn giản là bỏ chấp nhận câu trả lời bất kỳ lúc nào." meta.stackexchange.com/a/5235/191226
Mike Graf

1
Cảm ơn rất nhiều vì đã chỉ cho tôi điều này. Bây giờ tôi tự tin hơn.
Drake Guan

Câu trả lời:


156

Sử dụng biến môi trường MONGO_URL. Cái gì đó như:

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

Thay thế your_dbbằng meteorhoặc bất kỳ db nào bạn muốn sử dụng.


4
Tôi bị mắc kẹt. Bạn có thể giải thích cách Thay thế your_db bằng "sao băng"
Surjith SM 27/1213

3
Lưu ý rằng điều này làm việc sẽ không vào sản nếu triển khai để sao băng - xem stackoverflow.com/questions/21971036/...
maxko87

2
@SurjithSM export MONGO_URL=mongodb://localhost:27017/my_database_namesẽ đưa dữ liệu vào một cơ sở dữ liệu có tên my_database_name. Ý của ông ấy là nếu bạn muốn, bạn có thể làm export MONGO_URL=mongodb://localhost:27017/meteor. Tought Tôi khuyên bạn nên đặt tên cơ sở dữ liệu của bạn giống với dự án của bạn.
Benjamin Crouzier

1
Nó có thể được thực hiện với một số tệp cấu hình? Thử với settings.json và nó sẽ không làm việc
Kostanos

1
điều này đã làm hỏng ứng dụng cục bộ của tôi.
Deborah

14

Chúng tôi sử dụng npm:

  • Tạo package.jsontệp với npm init, nếu bạn chưa có.

  • Nhập và sửa đổi dòng sau trong tệp đó (thay thế tất cả các dòng <...>):

"scripts": {"meteor": "MONGO_URL=mongodb://<USER>:<PASSWORD>@<SERVER>:<PORT>/<DB> meteor"}
  • Sau đó, bạn có thể bắt đầu sao băng chỉ vớinpm run meteor

'MONGO_URL' không được công nhận như là một lệnh nội bộ hay bên ngoài
Abdul Hameed

1
nó là một biến môi trường, hãy chắc chắn rằng không có dấu cách xung quanh dấu =
malix


4

Bạn có thể sử dụng db.copyDatabase để thực hiện việc này, với thông báo trước rằng có lỗi và bạn không thể cập nhật dữ liệu trong Meteor. Xem https://github.com/meteor/meteor/issues/61

Nếu đang sử dụng phiên bản phát triển của Meteor, bạn có thể chuyển dữ liệu từ máy chủ MongoDB đang chạy bằng cách khởi động ứng dụng Meteor, sau đó thực hiện:

mongo --port 3002

Thao tác này sẽ kết nối bạn với máy chủ Mongo của ứng dụng Meteor. Bây giờ sử dụng db.copyDatabase như thế này:

db.copyDatabase('myappDatabase', 'meteor', 'localhost');

Thao tác này sẽ sao chép cơ sở dữ liệu myappDatabase từ máy chủ MongoDB chạy trên cổng tiêu chuẩn trên localhost, sang máy chủ Mongo của ứng dụng Meteor. Tên cơ sở dữ liệu mà ứng dụng Meteor sử dụng là 'sao băng'.


2

Chỉ cần sao chép dữ liệu vào cơ sở dữ liệu Meteor MongoDB - không có lý do gì để cố gắng kết nối Meteor với cơ sở dữ liệu hiện có và có nguy cơ ghi đè lên mọi thứ.

Sử dụng mongoexport để kết xuất các bộ sưu tập của bạn riêng lẻ, sau đó mongoimportnhập các tệp vào cơ sở dữ liệu có tên meteortrong phiên bản Meteor MongoDB. Phiên bản Meteor MongoDB chạy trên cổng 3002 với bind_address 127.0.0.1 và các tệp dữ liệu nằm trong thư mục con của dự án Meteor .meteor/local/db.

Xem tài liệu nếu bạn không quen với nhập / xuất trong MongoDB.


Điều đó có nghĩa là chúng ta nên cung cấp dịch vụ lưu trữ mongodb cho sao băng thay vì lưu trữ bằng các phương tiện khác?
Drake Guan

2
@Drake: Trừ khi bạn có thể điều chỉnh Meteor để hoạt động với cơ sở dữ liệu của mình. app/lib/mongo_runner.jsquyết định cách khởi chạy nó (bạn thậm chí có thể không yêu cầu mã khởi chạy, do đó hãy xem cách tắt nó). Kết nối với nó dường như xảy ra bên trong packages/mongo-livedata/mongo_driver.js, tôi nghĩ bạn có thể chỉ cần thay đổi tham số url trên dòng 21. Nếu bạn muốn biết giá trị của nó, hãy chèn console.log(url);vào dòng trước đó, khởi động lại Meteor và xem kỹ đầu ra Meteor của bạn. Hãy chắc chắn rằng bạn thực sự gọi Meteor lần trong ứng dụng của bạn cho nó để kích hoạt ...
Tamara Wijsman

@Drake: Nếu bạn muốn tôi đặt nhận xét của tôi như một câu trả lời (nếu nó phù hợp với bạn), vui lòng cho tôi biết.
Tamara Wijsman

@TomWijsman: Tôi đã thử console.log(url);và nhận được thông tin! Tôi sẽ đề nghị bạn hoàn thành câu trả lời này hoàn chỉnh vì tôi tin rằng nó sẽ giúp ích cho cộng đồng, hoặc ít nhất, những người như tôi chưa quen với sao băng ~
Drake Guan

rất dễ sử dụng mongochef để sao chép và dán dữ liệu hơn là các lệnh xuất / nhập. 3t.io/mongochef
Hodges Tối đa

0

Tất cả những gì tôi đã làm là thêm IP của máy chủ giọt nước biển Kỹ thuật số của mình, thay vì localhost và nó đã hoạt động:

env: {
      ROOT_URL: 'http://yourdomain.com',
      MONGO_URL: 'mongodb://104.236.24.66:27017/meteor',
      PORT: 3002,
    },

CHỈNH SỬA: sử dụng MUP để triển khai các dự án sao băng của bạn: https://github.com/zodern/meteor-up

env: {
      ROOT_URL: 'https://www.example.com',
      MONGO_URL: 'mongodb://localhost/meteor',
    },

Mup sử dụng Docker và sẽ "liên kết" 2 vùng chứa của bạn, do đó lưu trữ cả ứng dụng và mongo trên cùng một máy ảo (máy chủ). MongoDB của bạn sẽ không thể truy cập được từ IP công cộng vì lý do bảo mật.


bạn đã thêm cái này ở đâu?
Gaurav Arya

thực sự không tốt khi sử dụng IP công cộng của máy ảo của bạn cho mongoDB, tôi sẽ cập nhật câu trả lời của mình để sử dụng localhost.
Milean

0

Đã dành rất nhiều thời gian và phát hiện ra rằng nó yêu cầu trích dẫn xung quanh URL:

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

-6

Bạn phải giữ cho ứng dụng của mình chạy trong một cửa sổ đầu cuối, sau đó mở một cửa sổ khác và nhập "meteor mongo" và nó sẽ hoạt động!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.