CouchDB 1.7.1视图无法处理设计文档,配置include_design仍无效
嘿,我之前在CouchApp项目里也碰到过类似的情况,咱们一步步梳理下可能遗漏的设置:
确认设计文档的配置位置
你需要确保"include_design": "true"是放在设计文档的根节点的options字段里,而不是某个子视图的options中。正确的设计文档结构应该是这样的:{ "_id": "_design/your-design-doc", "options": {"include_design": "true"}, "views": { "your-view": { "map": "function(doc) { emit(doc._id, doc); }" } } }很多时候会不小心把配置放到视图级别的options里,这是不会生效的。
重新发布设计文档
修改options.json后,别忘记手动执行CouchApp的发布命令:couchapp push。有时候自动同步可能没触发,得确保最新的配置被推送到CouchDB服务器上。检查map函数的逻辑
即使开启了include_design,如果你的map函数里过滤掉了设计文档,那结果里还是看不到它们。比如要确保map函数里没有类似if (!doc._id.startsWith('_design/'))这样的判断,反而如果需要输出设计文档,应该明确处理:function(doc) { // 包含设计文档的处理 emit(doc._id, doc); // 或者针对设计文档做特殊处理 if (doc._id.startsWith('_design/')) { emit('design-docs', doc); } }之前的项目可能包含了这部分逻辑,新项目里说不定漏掉了。
验证视图索引状态
开启include_design后,CouchDB需要重新构建视图索引。你可以通过Futon(_utils界面)查看该视图的状态,确认索引已经完成构建,没有报错。如果索引还在生成中,可能暂时看不到设计文档的结果。排除全局配置混淆
注意include_design是设计文档级别的配置,不是CouchDB的全局ini配置。别误把这个配置加到local.ini或default.ini里,那是不会生效的,必须在设计文档里设置。
内容的提问来源于stack exchange,提问作者ctrl-alt-delor

