Ошибка nginx mongo и gridfs
Я пытался поставить установку gridfs/nginx/mongo, но я получаю некоторые странные ошибки.
Я попробовал с nginx 0.8.53 и 0.8.54 и последней версией mongo 1.6.5 64bit на последней Ubuntu. Компиляция с модулем gridfs работала хорошо: https://github.com/mdirolf/nginx-gridfs
server {
listen xx.xx.xx.xx;
server_name media.foo.com;
access_log /home/cloudy/log/nginx/media-access.log;
error_log /home/cloudy/log/nginx/media-error.log;
location /gridfs/ {
gridfs db_name;
mongo 127.0.0.1:27017;
}
}
Я получаю пустой ответ, когда пытаюсь получить файл:
curl -X GET -i 'http://media.foo.com/gridfs/4d4d526cea26b05041000015'
curl: (52) Empty reply from server
Мой error.log
2011/02/05 15:28:50 [alert] 7112#0: *1 zero size buf in writer t:0 r:0 f:0 0000000000000000 0000000000000000-0000000000000000 0000000000000000 0-0, client: 80.11.52.189, server: media.uk.cloudy.fr, request: "GET /gridfs/4d4d526dea26b05041000016 HTTP/1.1", host: "media.foo.com"
2011/02/05 15:28:52 [alert] 7112#0: *2 zero size buf in writer t:0 r:0 f:0 0000000000000000 0000000000000000-0000000000000000 0000000000000000 0-0, client: 80.11.52.189, server: media.uk.cloudy.fr, request: "GET /gridfs/4d4d526dea26b05041000016 HTTP/1.1", host: "media.foo.com"
Любое предложение приветствуется:)
2 ответа
Я на самом деле взломал модуль gridFS для доступа к чему-то еще в Монго. Тогда мой коллега отправил запрос на извлечение, и я думаю, что это последнее, что было сделано. Я также обнаружил утечку памяти, если вам нужен патч. Этот модуль не разрабатывался с июля. Возможно, он не совместим с новым nginx. Мы интенсивно используем его, поэтому, если я обнаружу, что он не совместим с.8x/Mongo 1.7.5, я исправлю это и сообщу вам. В то же время я бы попросил сопровождающего на github.
Также это не разработано 10gen, поэтому вы не сможете получить помощь от пользователя mongodb. Это не ошибка с Монго. Монго сильно изменился с июля, поэтому это тоже может быть проблемой. Плагин nginx использует драйвер Mongo C, который может быть устаревшим. Мы успешно используем его с nginx/0.7.67 и mongo 1.6.5.
Запустите ваш монго с подробным (-vvv) и хвостом монго журнала и ударить его. Посмотрите, действительно ли ваш запрос выполняет монго-запрос и есть ли в нем ошибки
Хорошо, я нашел корень проблемы,
Мои файлы были пусты. Использование mongoengine python GridFsProxy read() дает мне 0, но я все еще могу видеть их в коллекции mongoterm, db.fs.files, размер которой отличается от 0:/
Я посмотрел, куда я добавлял файлы в своем тестовом коде, и вот что я нашел:
f1 = open(path.join(PROJECT_ROOT,'test_files/marmot.jpg'), 'r')
f2 = open(path.join(PROJECT_ROOT,'test_files/img-sanctuaire.png'), 'r')
files = [f1, f2]
# add logs
for i in range(0, num):
log = Foo.create(
...
files=files,
)
# appends
batch_insert_logs.append(log.to_mongo())
db = _get_db()
# Batch insert logs
if batch_insert_logs:
db.mycollection.insert(batch_insert_logs)
Первые изображения журнала были действительными, но все остальные были пустыми, что привело к ошибке, упомянутой ранее. Изменение позиции создания файлов на:
# add logs
for i in range(0, num):
f1 = open(path.join(PROJECT_ROOT,'test_files/marmot.jpg'), 'r')
f2 = open(path.join(PROJECT_ROOT,'test_files/img-sanctuaire.png'), 'r')
files = [f1, f2]
log = Foo.create(
...
files=files,
)
# appends
batch_insert_logs.append(log.to_mongo())
db = _get_db()
# Batch insert logs
if batch_insert_logs:
db.mycollection.insert(batch_insert_logs)
Решил проблему полностью.
Вывод заключается в том, что где-то есть проблема, вероятно, в mongoengine. Я постараюсь подробно (-vvv) на монго, чтобы точно определить проблему.