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