Couchrest/open-uri возвращает пустые строки для ключа в представлении CouchDB

Я думал, что это проблема с кушеткой, но, похоже, это более глубокая внутренняя проблема Ruby. Со следующими ключами/значениями представления CouchDB:

...
{"key":["Document-2458","MethodID","286"],"value":1},
{"key":["Document-2458","MethodID","287"],"value":1},
{"key":["Document-2458","MethodID","288"],"value":1},
{"key":["Document-2458","MethodID","92"],"value":1},
...

Если я попрошу вид таким образом:

conn_str = 'http://127.0.0.1:5984/portal_development/_design/all_data_values/_view/view1?group=true'
key = '["Document-2458","MethodID","287"]'
result = JSON.parse(open(conn_str + "&key=" + CGI.escape(key)).read)
puts result

Я получаю этот результат:

{"rows"=>[{"key"=>["Document-2458", "MethodID", "287"], "value"=>1}]}

Но если я сделаю это:

conn_str2 = 'http://127.0.0.1:5984/portal_development/_design/all_data_values/_view/view1?group=true'
key = '["Document-' + "2485" + '","MethodID","287"]'
result = JSON.parse(open(conn_str2 + "&key=" + CGI.escape(key)).read)
puts result

Я получаю пустой результат:

{"rows"=>[]}

Я не могу на всю жизнь понять, почему ... Я даже прибегнул к взлому wireshark и посмотрел оба запроса на проводе. Байты в части данных пакета идентичны (материал с URL-адресом и параметрами). И я проверяю, что Couchdb действительно отправляет мне непустые данные для первого и пустые данные для второго. Couchdb даже показывает в логе одинаковые запросы:

[info] [<0.19053.0>] 127.0.0.1 - - 'GET' /portal_development/_design/all_data_values/_view/view1?group=true&key=%5B%22Document-2458%22%2C%22MethodID%22%2C%22287%22%5D 200
[info] [<0.19055.0>] 127.0.0.1 - - 'GET' /portal_development/_design/all_data_values/_view/view1?group=true&key=%5B%22Document-2485%22%2C%22MethodID%22%2C%22287%22%5D 200

Проблема в том, что всякий раз, когда я объединяю строку вместо ее жесткого кодирования, даже если результирующая строка одинакова. Но я понятия не имею, почему. Мысли?


person Colby Blair    schedule 22.03.2013    source источник


Ответы (1)


В первом ключевом тесте у вас есть Document-2458, где во втором у вас есть "Document-" + "2485".

Например, вы переставили 8 и 5 в конце идентификатора документа.

person Simon    schedule 22.03.2013
comment
Ах, чувак, большое спасибо. Не могу поверить, что я пропустил это. Помогает иметь еще один набор глаз (и, возможно, немного поспать :)). - person Colby Blair; 26.03.2013