Начав работать с CouchDB столкнулся с проблемой отладки view-функций. Пока они тривиальные, проблем нету. Как только что-то сложное и что-то начинает ломаться, отлаживать это — головная боль. Функция log даже на небольшом количестве документов (пара сотен) генерирует огромное количество трафика. Иногда хочется view-функцию тестировать на одном единственном документе. Хуки в коде типа if (doc._id == 'id интересуемого документа') — не лучший выход. Более того, хоть Futon и отличный интерфейс, редактор в браузере — неудобный. Табы, парные стрелки, подсветка синтаксиса — нет ничего. Кроме этого, браузер может в неподходящий момент упасть и похоронить ваш код.


Первый (head.js)
var log = function(message) {
  print(message);
}

var emit = function(key, value) {
  print("Emitting. Key: \n" + key + "\nValue: \n" + value);
}

var map =


* This source code was highlighted with Source Code Highlighter.
Тут важно — последняя строка не закрыта.

Второй — map.js, содержит отлаживаемую функцию. Содержимое может быть таким:
function(doc) {
  emit(doc._id, null);
}

* This source code was highlighted with Source Code Highlighter.

Третий — doc.js, содержит интересуемый документ.
doc = {
  "_id": "1234567",
  "_rev": "13-254709168",
  "date": 1240317352,
  "name": "document",
  "type" : "some type",
}

* This source code was highlighted with Source Code Highlighter.

Четвертый — foot.js, совсем тривиальный.
map(doc);

* This source code was highlighted with Source Code Highlighter.

Пятый — пускалка, run.sh (не забываем делать chmod +x run.sh)
#!/bin/bash

cat head.js $1 $2 foot.js | js -

* This source code was highlighted with Source Code Highlighter.

Как видно из файла, запускаем мы это всё так — ./run.sh map.js doc.js

Для успешного выполнения нужен пакет spidermonkey, парсер javascript, использующийся в mozilla. Пакет популярный, должен быть в большинстве дистрибутивов.

Теперь писать и отлаживать код вьюшек можно в привычном редакторе, а сами вьюшки можно хранить, например, в системе контроля версий.

На выходе видим что-то вроде
Emitting. Key:
1234567
Value:
null

* This source code was highlighted with Source Code Highlighter.

Если кому-то пригодилось, не шлите инвайты, лучше дайте кармы
angry_elf, это я и есть. Пишу в песочницу за недостатком кармы.