Ошибка 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) на монго, чтобы точно определить проблему.

Другие вопросы по тегам