Skip to content

Commit 034293c

Browse files
sdjcwmyleslee
authored andcommitted
两个修改 (#1886)
* fix: 修改评论插件处理时的并发量,确保不会超过 3 个 * feat: 评论插件增加 release 记录 每个数据中心在发布文档时都会在评论插件里增加一条 release 记录。 该记录关联本次发布的文档 id,用来感知当前那些文档和片段是有效的, 这样可以将过时的评论筛选出来移除掉。每个数据中心在构建时会增加 环境变量 `DOC_ENV`,通过这个区别不同数据中心的 release 记录。
1 parent aac96d2 commit 034293c

File tree

4 files changed

+54
-36
lines changed

4 files changed

+54
-36
lines changed

Diff for: Gruntfile.js

+49-32
Original file line numberDiff line numberDiff line change
@@ -431,10 +431,9 @@ grunt.registerMultiTask('docmeta', '增加 Title、文档修改日期、设置
431431
var cheerio = require('cheerio');
432432
var crypto = require('crypto');
433433
var _ = require('underscore');
434-
var AV = require('avoscloud-sdk').AV;
435-
AV.initialize("749rqx18p5866h0ajv0etnq4kbadodokp9t0apusq98oedbb", "axxq0621v6pxkya9qm74lspo00ef2gq204m5egn7askjcbib");
436-
// test project
437-
//AV.initialize("0siycem2w0l2zem2z5crxl7602zkf1r2a8qsooigq2my1al1", "4ipiwns1939nw2cgist4s49li89dvadrlrgthfvqmgzcaax5");
434+
var Promise = require('bluebird');
435+
var AV = require('leancloud-storage');
436+
AV.init({appId: "749rqx18p5866h0ajv0etnq4kbadodokp9t0apusq98oedbb", appKey: "axxq0621v6pxkya9qm74lspo00ef2gq204m5egn7askjcbib"});
438437
var Doc = AV.Object.extend('Doc');
439438
var Snippet = AV.Object.extend('Snippet');
440439
var commentDoms = ['p','pre'];
@@ -447,14 +446,13 @@ grunt.registerMultiTask('docmeta', '增加 Title、文档修改日期、设置
447446
var docVersion = crypto.createHash('md5').update($('#content').text()).digest('hex');
448447
// console.log(docVersion)
449448
$('html').first().attr('version', docVersion);
450-
451449
//以 docversion 为唯一标识,当文档内容发生变化,docversion 相应变化,
452450
var query = new AV.Query(Doc);
453451
query.equalTo('version', docVersion);
454452
return query.first().then(function(doc) {
455453
if (doc) {
456454
// 如果 doc 已经存在,则直接返回
457-
return AV.Promise.as();
455+
return doc;
458456
}
459457
doc = new Doc();
460458
doc.set('version', docVersion);
@@ -472,7 +470,7 @@ grunt.registerMultiTask('docmeta', '增加 Title、文档修改日期、设置
472470
doc.set('file', file.split('/').pop());
473471
grunt.log.writeln('save new Doc: %s', file);
474472
return doc.save();
475-
}).then(function() {
473+
}).then(function(doc) {
476474
// 在文档中添加 version 标记
477475
commentDoms.forEach(function(dom) {
478476
$('#content ' + dom).each(function() {
@@ -484,52 +482,71 @@ grunt.registerMultiTask('docmeta', '增加 Title、文档修改日期、设置
484482
});
485483
});
486484
grunt.file.write(filepath, $.html());
487-
return AV.Promise.as();
488-
}).then(function() {
489-
var promises = [];
485+
490486
// 保存 snippet version 和 content 的关联
491-
commentDoms.forEach(function(dom) {
492-
$('#content ' + dom).each(function() {
493-
var version = crypto.createHash('md5').update($(this).text()).digest('hex');
487+
return Promise.each(commentDoms, function(dom) {
488+
var promises = [];
489+
$('#content ' + dom).each(function(i, elem) {
490+
promises.push(Promise.resolve(elem))
491+
})
492+
return Promise.map(promises, function(elem) {
493+
var version = crypto.createHash('md5').update($(elem).text()).digest('hex');
494494
if(_.contains(allSnippetsVersion, version)) {
495495
return;
496496
}
497-
if($(this).text().trim().length === 0) {
497+
if($(elem).text().trim().length === 0) {
498498
return;
499499
}
500-
grunt.log.writeln('save new Snippet: %s', $(this).text().substr(0, 20) + '...');
501-
promises.push(new Snippet().save({
500+
grunt.log.writeln('save new Snippet: %s', $(elem).text().substr(0, 20) + '...');
501+
return new Snippet().save({
502502
snippetVersion: version,
503-
content: $(this).text(),
503+
content: $(elem).text(),
504504
file: filepath.split('/').pop()
505-
}));
506-
});
505+
});
506+
}, {concurrency: 3});
507+
}).then(function() {
508+
return doc;
507509
});
508-
return AV.Promise.all(promises);
509510
});
510511
}
511512
var self = this;
512513
// 查询所有已存在的 snippet version,
513514
// 用来判断哪些是新的 snippet,然后将其 version 和 content 添加到数据库
514515
var snippetsVersion = [];
515-
var getSnippetsVersion = function(skip) {
516-
return AV.Query.doCloudQuery('select snippetVersion from Snippet limit ?, ?', [skip, 1000]).then(function(result) {
517-
if(result.results.length === 0) {
518-
return AV.Promise.as();
516+
var getSnippetsVersion = function(createdAt) {
517+
return new AV.Query('Snippet')
518+
.select('snippetVersion')
519+
.greaterThan('createdAt', createdAt)
520+
.limit(1000)
521+
.ascending('createdAt')
522+
.find()
523+
.then(function(result) {
524+
if(result.length === 0) {
525+
return [];
519526
}
520-
_.each(result.results, function(snippet) {
527+
_.each(result, function(snippet) {
521528
snippetsVersion.push(snippet.get('snippetVersion'));
522529
});
523-
return getSnippetsVersion(snippetsVersion.length);
530+
return getSnippetsVersion(_.last(result).get('createdAt'));
524531
});
525532
};
526-
getSnippetsVersion(0).then(function() {
533+
var docEnv = process.env.DOC_ENV || 'default';
534+
grunt.log.writeln('Doc ENV: ', docEnv);
535+
getSnippetsVersion(new Date(0)).then(function() {
527536
grunt.log.writeln('current snippets count:', snippetsVersion.length);
528-
var allPromise = [];
529-
self.filesSrc.forEach(function(filepath) {
530-
allPromise.push(initDocVersion(filepath, snippetsVersion));
531-
});
532-
return AV.Promise.all(allPromise);
537+
return Promise.map(self.filesSrc, function(filepath) {
538+
return initDocVersion(filepath, snippetsVersion);
539+
}, {concurrency: 1})
540+
}).then(function(docs) {
541+
return new AV.Object('Release').save({
542+
env: docEnv,
543+
}).then(function(release) {
544+
return AV.Object.saveAll(docs.map(function(doc) {
545+
return new AV.Object('Release_Doc')
546+
.set('release', release)
547+
.set('doc', doc)
548+
}))
549+
})
533550
}).then(function() {
534551
//保证所有文档都处理完再进行任务完成回调
535552
grunt.log.writeln('version build allcompleted');

Diff for: fabfile.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ def _prepare_local_docs(target):
4343
##local("ruby render.rb")
4444
local("npm install -d");
4545
if target == 'qcloud':
46-
local("grunt build --theme=qcloud");
46+
local("DOC_ENV=qcloud grunt build --theme=qcloud");
4747
elif target == 'us':
48-
local("grunt build --theme=us --no-comments");
48+
local("DOC_ENV=us grunt build --theme=us --no-comments");
4949
else:
50-
local("grunt build ");
50+
local("DOC_ENV=%s grunt build " % target);
5151
# local("mkdir dist/api")
5252
# local("cp -rfv api/* dist/api/");
5353
# local("cd dist ; tar zcvf leancloud-docs.tar.gz ./* ; cd ..")

Diff for: md/README

Whitespace-only changes.

Diff for: package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
"assemble": "~0.4.33",
2424
"assemble-swig": "~0.1.0",
2525
"autoprefixer": "^6.3.4",
26-
"avoscloud-sdk": "^1.0.0-rc3",
2726
"axios": "^0.15.3",
27+
"bluebird": "^3.4.7",
2828
"body-parser": "^1.14.1",
2929
"cheerio": "^0.20.0",
3030
"coffee-script": "^1.10.0",
@@ -52,6 +52,7 @@
5252
"grunt-postcss": "^0.8.0",
5353
"grunt-usemin": "~3.1.1",
5454
"jit-grunt": "^0.10.0",
55+
"leancloud-storage": "^2.1.2",
5556
"moment": "^2.10.6",
5657
"nunjucks": "^2.4.1",
5758
"serve-static": "^1.10.0",

0 commit comments

Comments
 (0)