【问题标题】:Meteor code must always run within a fiber when deploy in meteor server在流星服务器中部署时,流星代码必须始终在光纤内运行
【发布时间】:2013-06-22 08:50:52
【问题描述】:

当我将应用程序部署到流星云服务器时,我一直遇到此错误。

Meteor 代码必须始终在 Fiber 中运行 在 _.extend.get (app/packages/meteor/dynamics_nodejs.js:14:13) 在 _.extend.apply (app/packages/livedata/livedata_server.js:1268:57) 在 _.extend.call (app/packages/livedata/livedata_server.js:1229:17) 在 Meteor.startup.Meteor.methods.streamTwit (app/server/server.js:50:24)

但是,我已经包裹在 Fibers 中了

streamTwit: function (twit){
    var userid = '1527228696';
    twit.stream(
    'statuses/filter',
    { follow: userid},
      function(stream) {
          stream.on('data', function(tweet) {

          Fiber(function(){
            if(tweet.user.id_str === userid)
            {
              Meteor.call('addQn', tweet);
            }
          }).run();
              console.log(tweet);
              console.log('---------------------------------------------------------');
              console.log(tweet.user.screen_name);
              console.log(tweet.user.name);
              console.log(tweet.text);
          });
        }
      );
    }

我不知道是什么原因,但有人建议我应该用 Meteor.bindEnvironment 包装它。因此,我这样做了:

streamTwit: function (twit){
    this.unblock(); // this doesn't seem to work
    console.log('... ... trackTweets');
    var _this = this;
    var userid = '1527228696';
    twit.stream(
    'statuses/filter',
    { follow: userid},
      function(stream) {
          stream.on('data', function(tweet) {

           Meteor.bindEnvironment(function () {
            if(tweet.user.id_str === userid)
            {
              Meteor.call('addQn', tweet);
            }
           }, function(e) {
             Meteor._debug("Exception from connection close callback:", e);
         });
              console.log(tweet);
              console.log('---------------------------------------------------------');
              console.log(tweet.user.screen_name);
              console.log(tweet.user.name);
              console.log(tweet.text);
          });
        }
      );
    }

//添加提问方式

addQn:function(tweet){
      questionDB.insert({'tweet': tweet, 'date': new Date()});
    }

但现在它甚至不起作用。我意识到这只发生在我尝试将一些数据插入 mongodb 时。 我可以知道我的代码有什么问题吗?谢谢! 所有这些代码都写在 app/server/server.js 中

【问题讨论】:

    标签: mongodb deployment meteor meteorite node-fibers


    【解决方案1】:

    您不需要在服务器端使用Meteor.call。这仅适用于客户端代码。直接调用addQn 或者更好的是,内联它,因为它只是一行代码。

    【讨论】:

    • 嗨,如果我内联它。它将显示 Meteor 代码也必须在 Fiber 中运行
    猜你喜欢
    • 2013-10-04
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 2015-03-28
    • 2015-04-16
    • 2013-12-05
    • 1970-01-01
    • 2012-12-01
    相关资源
    最近更新 更多