1

私はmongohqで外部mongoインスタンスを使用しているので、

MONGO_URL=mongodb://heroku:censored@alex.mongohq.com:10025/appCensored

私の環境で。このmongoインスタンスを「読み取り専用」モードで使用しており、meteorアプリを監視アプリケーションとして使用しています。すべてのコレクションの_idは、流星のuuidではありません。

meteorを起動し、クライアントをlocalhost:3000に接続すると、サーバーに次のあいまいなエラーメッセージが表示されます。

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)

クライアントの「content」コレクションにドキュメントがありません。ブラウザを更新してクライアントをサーバーに再接続すると、すべてがスムーズに進み、「コンテンツ」にドキュメントが表示されます。'content'コレクションのサブスクリプションに問題があるようです。このコレクションのパブリッシュおよびサブスクライブコードは次のとおりです。

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

私は何を間違えますか?

4

2 に答える 2

2

同じエラーが発生しましたが、オブザーバーが発生しました。後でわかったように、このエラーはデータベースへの接続がない場合よりも発生します。
流星の非同期性のため。データベースへの接続が完全に確立され、他のコードの実行と接続の受け入れを開始するまで待機しません。

このように、サブスクリプションコードをクライアント側のMeteor.startup(...)に配置してみてください。

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


Meteor.startUp ->
  initSubscripions
于 2012-11-25T03:12:19.380 に答える
2

これは0.5.1で導入されたバグでした。Meteor 0.5.2をリリースしました。これで修正されるはずです(実際、この問題を修正する以外の変更はありません)。でアップグレードしmeteor updateてみて、問題が解決しない場合はお知らせください。

于 2012-11-27T18:48:52.713 に答える