couchDB designDoc 开发工作流程和版本控制

Posted

技术标签:

【中文标题】couchDB designDoc 开发工作流程和版本控制【英文标题】:couchDB designDoc development workflow and version control 【发布时间】:2013-02-16 10:42:48 【问题描述】:

对于开发,我想将构成 couchDB 设计文档的各种组件(viewslistsshows)作为单独的文件与我的其他开发代码一起保存在名为 couchDB 的目录中。 当我对更改感到满意时,我想使用 couchapp.push 发送到数据库,同时还能够对设计文档组件文件进行版本控制。

我在想也许可以使用节点模块“couchapp”和节点来扫描目录及其子目录以查找 .js 文件,然后使用它们构建设计文档并上传到 couchDB。 也许子目录的结构如下:

designDocsJs
  |-- views
  |     |--view1.js
  |     |--view2.js
  |-- shows
  |-- lists

是否可以将 map 和 reduce 放在同一个文件中,例如。 'view1.js' 还是需要在单独的文件中 'view1-map.js''view1-reduce.js'

目前我正在使用以下内容,但我不确定如何使用节点读取 .js 文件并将它们动态添加到 ddoc.views ? 任何指导都将不胜感激,尤其是使用 javascript/node 解决方案。

var couchapp = require('couchapp')
    , path = require('path');

  ddoc = 
      _id: '_design/entitiesNew'
    , views: 
    , lists: 
    , shows:  
  

  // node module exports
  module.exports = ddoc;

  // REPLACE ME WITH SOME WAY OF READING A
  // STRUCTURED DIR OF .JS FILES AND COMBINING
  // AS NECESSARY
  ddoc.views.byType = 
    map: function(doc) 
      emit(doc.type, null);
    ,
    reduce: '_count'
  

  couchapp.loadAttachments(ddoc, path.join(__dirname, '_attachments'));

然后:

$ cd path/to/here
$ mkdir _attachments
$ couchapp push updateCouchDbDesigndocs.js http://localhost:5984/databaseName

【问题讨论】:

couchapp 工具所需的实际结构(其中 map 和 reduce 是文件夹中的不同文件)到底有什么问题?编写自己的工具真的值得吗? 我想知道如何将我的 couchDB '_design/doc/_view' 源文件作为单个文档进行管理,其方式与我在 Web 开发工作流程中管理所有其他脚本文件的方式类似:使用git 版本控制和 build/make/grunt 脚本。 通过看到您对答案的评论,我意识到您在不了解如何使用的情况下使用了couchapp。玩得开心couchapp...,永远不要忘记 RTFM ;) 确实,我并没有真正使用 couchapp 来制作“couchapps”,我只是将其用作从我的 sourceCode 同步我的设计文档的一种方式 -> couchDB 我只是试图解释 couchapp 已经做了你想要的,但大卫在回答中解释得更好。 【参考方案1】:

couchapp 工具就是这样做的。我使用 couchapp 推送,没有其他脚本。

目录结构如下:

mycouchappdir
|-- views/
    |-- myview1/
       |-- map.js
       |-- reduce.js
|-- shows/
    |-- myshow1.js
    |-- myshow2.js
|-- _attachments/
    |-- myattachment.png

您的 map.js 文件将如下所示:

function(doc) 
   emit(doc.type, null);

然后从mycouchappdir 运行couchapp push


您可能还希望考虑将您的 couchapps 放入他们自己的存储库中。运行couchapp push 总是会为设计文档创建一个新修订版。因此,如果您的 couchapp 有不同的存储库,那么当您对存储库进行更改时,它就是对 couchapp 的更改,您可以在知道新修订版与旧修订版不同的情况下推送它。

【讨论】:

这一切都说得通,我使用couchapp push 取得了成功。

以上是关于couchDB designDoc 开发工作流程和版本控制的主要内容,如果未能解决你的问题,请参考以下文章

如何从 couchdb 运行服务器端代码?

CouchDB、Elastic Search 和 River 插件无法正常运行

CouchDB客户端开发—Java版

couchdb:更新带有附件的文档上的元数据?

为本地开发采样一个大型 CouchDB 数据库,避免长视图构建

Couchdb _design/doc/_update/push 不能作为对象工作