Я пытаюсь установить следующее представление о CouchDB
{
"_id":"_design/id",
"_rev":"1-9be2e55e05ac368da3047841f301203d",
"language":"javascript",
"views":{ "by_id":{
"map" : "function(doc) { emit(doc.id, doc)}"
},"from_user_id":{
"map" : "function(doc) { if (doc.from_user_id) {emit(doc.from_user_id, doc)}}"},
"from_user":{
"map" : "function(doc) { if (doc.from_user) {emit(doc.from_user, doc)}}"},
"to_user_id":{
"map" : "function(doc) {if (doc.to_user_id){ emit(doc.to_user_id, doc)}}"},
"to_user":{
"map" : "function(doc) {if (doc.to_user){ emit(doc.to_user, doc)}}" },
"max_id":{
"map" : "function(doc) { if (doc.id) {emit(doc._id, eval(doc.id))}}",
"reduce" :"function(key,value) { a = value[0]; for (i=1; i <value.length; ++i){a = Math.max(a,value[i])} return a}"
}
}
}
когда я пытаюсь 'ПОМЕСТИТЬ' это завихрение использования:
curl -X PUT -d keys.json $CDB/_design/id
{"error":"bad_request","reason":"invalid UTF-8 JSON"}
Я знаю, что это - весьма допустимый JSON, потому что я протестировал его с помощью 'json' библиотеки, встроенной в Python 2.6, это загружается прекрасный. Взлеты винта JS дают мне, ошибка 'должна оценить к функции'
Я проверил файл с передозировкой, нет никаких скрытых символов управления, моя система установлена на UTF-8. Я использую версию 0.10.1 CouchDB
Что еще могло бы быть неправильным с ним?
@titanoba намекнул на проблему:
Параметр -d
для curl ожидает фактические данные в качестве аргумента!
Если вы хотите предоставить данные в файле, вам нужно добавить к нему префикс @
:
curl -X PUT -d @keys.json $CDB/_design/id
Может потребоваться заключить JSON в одинарные кавычки:
curl -vX PUT http://localhost:5984/dbname/docid -d '{"foo" : "bar"}'
у меня работает, но
curl -vX PUT http://localhost:5984/dbname/docid -d {"foo" : "bar"}
вызывает указанную вами ошибку. Я предполагаю, что оболочка каким-то образом мешает отправляемым вами данным, когда вы опускаете одинарные кавычки.
править: я использую bash.
Вы недавно обновили CouchDB из исходного кода? Если это так, обязательно удалите все старые файлы.
Причина
curl -vX PUT http://localhost:5984/dbname/docid -d {"foo" : "bar"}
не работает в том, что кавычки интерполируются оболочкой, которая использует одинарные кавычки.