2015-11-06 103 views
1

我使用meteor-job-collectionhttps://github.com/vsivsi/meteor-job-collection)启动作业;但是,我无法创造一份工作。与流星工作收集

我有一个方法定义为

Meteor.methods({ 
    insertItems: function (dataArray) { 
    check(dataArray, [ Object ]); 

    dataArray.forEach(function (element) { 
     [...] 
    }); 
    } 
}); 

但该方法是非常内存有较高要求,所以我想将其包装工作中。我如何开始这项工作?

我已经试过

var job = new Job(Jobs, 'insertItems', data).priority('normal').retry(
    { 
    retries: 5, 
    wait: 15 * 60 * 1000 
    } 
).delay(60 * 60 * 1000).save(); 

,但我得到的

Jobs = JobCollection('jobQueue'); 

if (Meteor.isServer) { 
    Jobs.allow({ 
    admin: function (userId, method, params) { 
     return true; 
    }, 
    }); 
} 
+0

检查并获得有关错误 –

回答

2

多的东西从你的代码所缺少

Error invoking Method 'jobQueue_jobSave': Internal server error [500] 

我的工作集合定义的错误。

1 - 确保您提交任何作业之前启动作业服务器。呼叫startJobServer()在服务器上的jobCollection。

Jobs = JobCollection('jobQueue'); 

if (Meteor.isServer) { 
    Jobs.allow({ 
    admin: function (userId, method, params) { 
     return true; 
    }, 
    }); 
    Jobs.startJobServer(); 
} 

2 - 您需要执行作业的处理。一份工作只不过是一个附有数据的标签,计划在某个时间点运行。处理程序实现作业逻辑。在你的情况,你会需要的东西是这样的:在您的服务器控制台

var workers = Job.processJobs('jobQueue', 'insertItems', 
    function (job, cb) { 
    insertData = job.data; 
    // do anything with the job data here. 
    // when done, call job.done() or job.fail() 

    job.done(); // when done successfully 
    job.fail("with reason or error"); //when failing 

    // Be sure to invoke the callback 
    // when work on this job has finished 
    cb(); 
    } 
);  
+0

更多细节现在我的工作,说'ready'但从来没有开始,也没有完成。我究竟做错了什么? – Jamgreen

+0

看起来你忘了执行作业处理本身。我已经更新了我的答案。 –

+0

我绝对需要工人! :-D这应该放在哪里?也许我误解了一些东西。我以为我写了'insertItems',因为我有一个这个名字的方法。这是错的吗?难道我不是要创建'Jobs.processJobs()'一些工作,并呼吁这些工作/工作的方法与'新的职位(职位,“作业方法名” ....)'? – Jamgreen