Javascript 我得到Heroku H12请求超时错误,没有明显的原因
在我的解析服务器中,我有一个名为Javascript 我得到Heroku H12请求超时错误,没有明显的原因,javascript,node.js,heroku,parse-server,parse-cloud-code,Javascript,Node.js,Heroku,Parse Server,Parse Cloud Code,在我的解析服务器中,我有一个名为Stats的类,它包含timeScore(数字)列 我正在使用云代码更新列timeScore中的所有250k行 我的代码工作得很好,除了我没有明显的原因而出现以下H12请求超时错误 heroku[router]: at=error code=H12 desc="Request timeout" method=POST path="/parse/functions/timeScore 无论我选择什么batchSize,我都会收到超时错误,并且每30秒收到一次。我一
Stats
的类,它包含timeScore
(数字)列
我正在使用云代码更新列timeScore
中的所有250k行
我的代码工作得很好,除了我没有明显的原因而出现以下H12请求超时错误
heroku[router]: at=error code=H12 desc="Request timeout" method=POST path="/parse/functions/timeScore
无论我选择什么batchSize,我都会收到超时错误,并且每30秒收到一次。我一共买了5次。第五次之后,我再也看不到它了,这个过程继续进行,没有任何问题或错误。我在过程中大约2.5分钟(30秒*5)出现第五个也是最后一个错误。整个过程大约需要14分钟。这些超时错误不会以任何方式影响进程。所有250k对象都将更新和保存,而与所选的batchSize无关,也与超时错误无关
我想可能是因为我从未调用过results.error
或results.success
服务器认为我仍在做一些工作,并显示了错误。然而,我更新了我的代码,如下所示,以包括它们,我仍然得到超时错误
问题是在每次超时错误processBatch()
再次从服务器调用后。因为我有5个超时错误processBatch()
被调用了5次。因此,在第5次超时错误之后,有5个processBatch()
函数同时运行(我通过日志确认了这一点)。这使得这一过程所需的时间比它应该需要的时间要长得多
我没有执行任何长时间运行的操作。我只是在我的解析服务器上更新和保存数据
这是我的密码:
var _ = require("underscore");
Parse.Cloud.define("timeScore", function(request, response) {
var counter = 0;
function processBatch(query, batchSize, startingAt, process) {
query.limit(batchSize);
query.skip(startingAt);
return query.find().then(results => {
return process(results).then(() => results.length);
}).then(length => {
return (length === batchSize)? processBatch(query, batchSize, startingAt+length, process) : {};
});
}
function setTimeScores(stats) {
console.log("LENGTH " + stats.length);
_.each(stats, stat => {
counter ++;
stat.set("timeScore", counter);
});
return Parse.Object.saveAll(stats);
}
var query = new Parse.Query("Stats");
processBatch(query, 1000, 0, setTimeScores).then(results => {
response.success(results);
}).catch(error => {
response.error(error);
});
});
我这样称呼它
#!/usr/bin/env node
var Parse = require("parse/node");
Parse.initialize("xx", "xx");
Parse.serverURL = "http://randomapp.herokuapp.com/parse";
Parse.Cloud.run('timeScore');
是什么导致我收到的heroku超时错误?我怎么修理它 对“processBatch”中的递归感到好奇。您可以调查使用“工人”绕过H12..”“增量”也可能有用,在这种情况下为原子运算。在一个没有H12限制的worker中,只需处理整个集合一次,没有递归,没有分段。如果适用,请使用“递增”运算。@Robert Rowntree我试着完全按照你说的去做。我编写的第一个代码一次处理了整个250k对象,但我不知道如何使代码在worker dyno上运行,而不是在web dyno上运行,因为在web dyno上我得到了H12错误。不久前我发布了一个关于它的问题。你能不能看看,告诉我我做错了什么@Robert Rowntree你能详细说明什么是“增量原子操作”吗?