2013-07-26 32 views
6

Tôi đang cố gắng kết nối Meteor với MongoDB hiện có. Tôi không thể sao chép cơ sở dữ liệu hoặc thay đổi tên của nó, bởi vì được sử dụng bởi các ứng dụng khác.Meteor không kết nối với MongoDB

Tôi biết I have to set a MONGO_URL environment var để kết nối với nó. Tuy nhiên, sau khi tôi cài đặt nó, Meteor không kết nối với cơ sở dữ liệu MongoDB đặc biệt. Tôi đã thử thực hiện .find() nhưng không trả lại bất kỳ tài liệu nào. An .insert() từ bảng điều khiển web hiển thị thông tin trong trang nhưng không được chèn vào cơ sở dữ liệu. Dưới đây là các mã:

$ echo $MONGO_URL 
mongodb://localhost:27017/autana_dev 

./lib/models.js

Posts = new Meteor.Collection('posts'); 

./server/app.js

Meteor.publish('posts', function() { 
    return Posts.find(); 
}); 

./client/app.js

Meteor.subscribe('posts'); 

Template.main.posts = function() { 
    return Posts.find(); 
}; 

Bất kỳ ý tưởng nào? Bất kỳ ai? Bản phát hành phiên bản Meteor của tôi là 0.6.4.1 và phiên bản MongoDB là 2.4.1.

CẬP NHẬT: 28 tháng 7 Sau khi chạy sao băng với meteor run, tôi đã mở cửa sổ bảng điều khiển mới trong thư mục dự án để chạy bảng điều khiển sao lưu mongo. Tuy nhiên, sau khi chạy meteor mongo tôi nhận được như sau:

mongo: Meteor isn't running. 

This command only works while Meteor is running your application 
locally. Start your application first. 
+0

Bạn đang thử điều này trong một ứng dụng đi kèm hoặc sử dụng 'meteor [run]'? – Akshat

+0

@Akshat Chỉ cần chạy 'meteor' ngay bây giờ. – betacar

+0

@betacar khi chạy sao băng mở ra một thiết bị đầu cuối riêng biệt và sử dụng lệnh 'meteor mongo' trong thư mục dự án. Nó có kết nối với db và bạn có thể chạy lệnh ở đó không? –

Trả lời

3

Như bạn đã biết, bởi vì bạn đã đăng issue, đây là lỗi trong thiên thạch.

Cách giải quyết của tôi là kết nối với mongodb của tôi với trình khách mongo tiêu chuẩn. Bạn có thể tìm thấy cổng nào mà db của bạn đang chạy bằng cách xem tệp yourapp/.meteor/db/METEOR-PORT và sau đó chỉ cần chạy mongo localhost:[put that port number here].

0

Bạn có chắc chắn vấn đề là Meteor không kết nối với cơ sở dữ liệu? Bạn có vài phần ở đây mà phải làm việc cùng nhau. Tôi không thấy bất cứ điều gì rõ ràng là sai, nhưng tôi sẽ đơn giản hóa mã để xác minh vấn đề là nơi bạn nghĩ rằng nó được.

Ví dụ: thử thêm console.log (Posts.find()) vào Meteor.startup trên máy chủ.

+0

'console.log (Posts.find());' trả về một đối tượng không có bộ sưu tập hoặc tài liệu: 'Object {collection = {...}, cursor_pos = 0, reactive = true} '; 'Object {docs = {...}, _observeQueue = {...}, next_qid = 2, thêm ...}' – betacar

+0

Tôi gặp vấn đề tương tự khi bạn là một @betacar đột ngột nhưng giao diện điều khiển của tôi. log mặc định là 'LocalCollection' vì lý do nào đó - mặc dù tôi đã sử dụng một tên rõ ràng:' LocalCollection.Cursor {collection: LocalCollection, ' –

+0

Hãy thử console.log (Posts.find(). count()) để thay thế. Tìm không ngay lập tức truy cập cơ sở dữ liệu hoặc trả lại tài liệu. – jrullmann

0

Tôi giả sử bạn chạy Meteor trên Linux hoặc Mac. Nếu đây không phải là trường hợp, mã có thể không hoạt động.

lý do rõ ràng nhất là cơ sở dữ liệu mongo không chứa bất kỳ tài liệu posts nào. đầu ra của là gì:

$ mongo 
> use autana_dev 
> db.posts.find({}).count() 

Nếu đầu ra không phải là null hoặc 0 bạn có thể cần phải kết nối với một tên người dùng và mật khẩu.

export MONGO_URL="mongodb://user:[email protected]:27017/autana_dev 

nếu điều này không giúp đỡ, tôi muốn thử thêm một chút khai thác gỗ để tìm hiểu xem bài viết không được gửi hay chưa nhận được:

Meteor.publish('posts', function() { 
    console.log("returning " + Posts.find({}).count() + " posts"); 
    return Posts.find(); 
}); 

và nếu con số này lớn hơn 0 trên khách hàng

var postsHandle = Meteor.subscribe('posts'); 

Template.main.posts = function() { 
    if(postsHanlde.ready()){ 
    console.log("I have " + Posts.find({}).count() + " posts on the client"); 
    return Posts.find(); 
    } 
}; 

điều kiện if(postsHanlde.ready()) đảm bảo bạn không cố gắng hiển thị các bài đăng trước khi họ đến.

Nếu bạn có tài liệu trong mongodb nhưng không có gì được chọn trong Meteor, có thể mongodb của bạn không hoạt động chính xác.

Khá dễ dàng để kiểm tra xem bằng cách thay thế mongodb bằng giải pháp trực tuyến. Tạo tài khoản miễn phí trên mongolab và thay đổi MONGO_URL của bạn thành tài khoản do giao diện điều khiển mongolab cung cấp. Chèn một số bài đăng ở đó và kiểm tra lại.

Nếu bạn vẫn không nhận được bất kỳ tài liệu nào, thì ...

Đó là tất cả những gì tôi có thể nghĩ từ đầu vào của bạn. Hy vọng nó đã giúp.

+0

Bộ sưu tập 'bài đăng' chứa gần 2 triệu tài liệu. Rõ ràng không phải là bộ sưu tập. MongoDB cục bộ của tôi không được bảo vệ bằng xác thực người dùng/vượt qua, vì được dự định sẽ được sử dụng cho các mục đích phát triển. – betacar

+0

phải có lỗi ở đâu đó. bạn đã thử phần đăng nhập để tìm hiểu xem dữ liệu đã được gửi chưa? –

0

Đầu tiên, hãy chạy Mongo trong cửa sổ một vỏ của

Sau đó chỉ cần chạy "sao băng Mongo" trong cửa sổ của vỏ khác trong khi nắm tay vẫn chạy! On mac của tôi, trong "dụ bảng dẫn", đây là làm thế nào tôi đã thực hiện:

  1. "sao băng chạy bảng dẫn"
  2. "cd .meteor/bảng dẫn; sao băng Mongo"
Các vấn đề liên quan