2013-07-26 55 views
6

我想將流星連接到現有的MongoDB。我無法複製數據庫或更改其名稱,因爲被其他應用程序使用。流星並沒有連接到MongoDB

我知道I have to set a MONGO_URL environment var與它連接。然而,在我設置它之後,Meteor並沒有連接到特定的MongoDB數據庫。我試着做.find(),但它沒有返回任何文檔。來自Web控制檯的.insert()顯示頁面中的信息,但它不會插入到數據庫中。下面是代碼:

$ 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(); 
}; 

任何想法?任何人?我的Meteor版本是0.6.4.1,MongoDB版本是2.4.1。

更新:7月28日 運行流星meteor run後,我在項目目錄中打開一個新的控制檯窗口來運行流星蒙哥控制檯。但是,運行meteor mongo後,我收到了以下:

mongo: Meteor isn't running. 

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

你是在一個捆綁的應用程序中使用或使用'流星[run]'? – Akshat

+0

@Akshat現在只需要運行'流星'。 – betacar

+0

@betacar當運行meteor打開一個單獨的終端並在項目目錄中使用命令'meteor mongo'。它連接到數據庫,你可以在那裏運行命令? –

回答

3

如您所知,因爲您發佈了issue,這是流星中的一個錯誤。

我的解決方法是用標準mongo客戶端連接到我的mongodb。通過查看文件yourapp/.meteor/db/METEOR-PORT,然後運行mongo localhost:[put that port number here],可以找到您的數據庫運行的端口。

0

你確定的問題是,流星不會連接到數據庫?這裏有幾件必須一起工作。我沒有看到任何明顯的錯誤,但我會簡化代碼以驗證問題出在哪裏。

例如,嘗試將console.log(Posts.find())添加到服務器上的Meteor.startup。

+0

'console.log(Posts.find());'返回一個沒有集合或文檔的對象:'Object {collection = {...},cursor_pos = 0,reactive = true}'; 'Object {docs = {...},_observeQueue = {...},next_qid = 2,more ...}' – betacar

+0

我遇到了同樣的問題,你突然間@betacar,但我的控制檯。日誌默認爲'LocalCollection'出於某種原因 - 雖然我明確使用了一個名稱:LocalCollection.Cursor {collection:LocalCollection,' –

+0

嘗試console.log(Posts.find()。count())。查找不會立即訪問數據庫或返回文檔。 – jrullmann

0

我假設你在Linux或Mac上運行Meteor。如果情況並非如此,則代碼可能不起作用。

最明顯的原因是mongo數據庫不包含任何posts文件。什麼是的輸出:

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

如果輸出不是null0你可能需要用一個用戶名和密碼進行連接。

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

如果這沒有幫助,我會嘗試加入了一下記錄,以找出是否帖子不被髮送或沒有收到:

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

,如果數量大於0上客戶端

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(); 
    } 
}; 

條件if(postsHanlde.ready())確保您不試圖在他們到達之前顯示帖子。

如果你在你的mongodb中有文件但沒有在流星中被選中,你的mongodb可能無法正常工作。

通過用在線解決方案替換mongodb來檢查是相當容易的。在mongolab上創建一個免費帳戶,並將您的MONGO_URL更改爲由mongolab控制檯提供的帳戶。在那裏插入一些帖子並再次測試。

如果你還沒有得到任何文件,然後...

這是所有我可以從你輸入想到的。希望它有幫助。

+0

'posts'集合包含近200萬個文檔。顯然不是收集。我的本地MongoDB沒有使用用戶/身份驗證進行保護,因爲它旨在用於開發目的。 – betacar

+0

某處出現錯誤。您是否嘗試過日誌記錄部分以查明數據是否正在發送? –

0

首先,在一個外殼的Windows

運行蒙戈然後,只需在另一個shell的窗口中運行「流星蒙戈」,而拳仍在運行! 我的Mac上,在 「排行榜爲例」,這裏是我怎麼做了:

  1. 「流星跑排行榜」
  2. 「CD .meteor /排行榜;流星蒙戈」