2012-11-21 1 views
1

J'utilise par exemple mongo externe à mongohq, donc je"Impossible d'appeler yield dans un bloc noYieldsAllowed!" erreur sur le serveur lorsque le client se connecte

MONGO_URL=mongodb://heroku:[email protected]:10025/appCensored 

dans mon environnement. J'utilise cette instance mongo en mode "lecture seule", en utilisant mon application météore comme application de surveillance. _id's dans toutes les collections ne sont pas des uuids de météore.

Quand je commence météore et connecter un client à localhost: 3000, je me suis l'obscur message d'erreur sur le serveur:

Internal exception while processing message { msg: 'sub', id: '9e11edd5-b8a5-4a67-86de-a3270ef3601f', name: 'content', params: [ 'ORG-4d9d4981-55d8-44ee-9025-32c41be679ca' ] } Error: Can't call yield in a noYieldsAllowed block! at Function.Meteor._noYieldsAllowed.Fiber.yield (app/packages/meteor/fiber_helpers.js:13:11) at Function.wait (/usr/local/meteor/lib/node_modules/fibers/future.js:111:14) at Object.Future.wait (/usr/local/meteor/lib/node_modules/fibers/future.js:321:10) at _Mongo._createSynchronousCursor (app/packages/mongo-livedata/mongo_driver.js:369:23) at _Mongo._observe (app/packages/mongo-livedata/mongo_driver.js:493:14) at Object.Meteor._noYieldsAllowed (app/packages/meteor/fiber_helpers.js:17:12) at _Mongo._observe (app/packages/mongo-livedata/mongo_driver.js:485:10) at Cursor._observeUnordered (app/packages/mongo-livedata/mongo_driver.js:344:22) at Cursor._publishCursor (app/packages/mongo-livedata/mongo_driver.js:305:28) at sub._runHandler (app/packages/livedata/livedata_server.js:378:13)

et j'ai pas les documents dans la collection « contenu » sur le client. Lorsque j'actualise le navigateur et que je reconnecte le client au serveur, tout se passe bien et j'ai des documents dans le 'contenu'. On dirait que quelque chose ne va pas avec l'abonnement à la collection «contenu». Publiez et souscrivez le code pour cette collection est ci-dessous:

server.coffee 
------------- 
Content = new Meteor.Collection 'content' 

Meteor.publish 'content', (org) -> 
    Content.find { recipientUid: org } 

client.coffee 
------------- 
Content = new Meteor.Collection 'content' 

Meteor.autosubscribe -> 
    uid = Session.get 'testUserUid' 
    if uid 
     Meteor.subscribe 'content', uid 

Template.main.top_content = -> 
    # observe won't work with limited collections, use workaround 
    top = Content.find({}, { sort: { total: -1 } }).fetch() 
    top.slice 0, 10 

Qu'est-ce que je fais mal?

+0

Il y a un changement dans le 0.7.1 -> 0.7.1.2 de météore qui déclenche un message d'erreur similaire. Consultez ce fil pour plus de détails: https://github.com/meteor/meteor/issues/1868 – meawoppl

Répondre

2

Ceci était un bug introduit en 0.5.1. Je viens de sortir Meteor 0.5.2 qui devrait le réparer (en fait, il ne fait aucun changement autre que la résolution de ce problème). Essayez de mettre à jour avec meteor update et laissez-moi savoir si cela ne résout pas votre problème!

+0

Oui, cela a résolu le problème. Merci beaucoup! –

+0

Il y a un changement dans le 0.7.1 -> 0.7.1.2 de météore qui déclenche un message d'erreur similaire. Consultez ce fil pour plus de détails: github.com/meteor/meteor/issues/1868 – meawoppl

2

J'ai eu la même erreur, mais avec observateur. Comme je l'ai découvert plus tard, cette erreur se produit qu'il n'y a pas de connexion à la base de données.
En raison de la nature asynchrone du météore. Il n'attend pas que la connexion à la base de données soit entièrement établie et commence à exécuter un autre code et accepte les connexions. Essayez de placer votre code d'abonnement dans Meteor.startup (...) du côté client comme ceci.

initSubscripions = -> 
    uid = Session.get 'testUserUid' 
    Meteor.subscribe 'content', uid if uid 


Meteor.startUp -> 
    initSubscripions 
+0

Cela a fonctionné, merci beaucoup !!! –

Questions connexes