ошибка nginx mongo и gridfs - PullRequest
       19

ошибка nginx mongo и gridfs

0 голосов
/ 05 февраля 2011

Я пытался установить установку 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

My 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 ]

1 голос
/ 06 февраля 2011

Хорошо, я нашел корень проблемы,

Мои файлы были пусты. Использование 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) на монго, чтобы точно определить проблему.

1 голос
/ 06 февраля 2011

Я на самом деле взломал модуль gridFS, чтобы получить доступ к чему-то еще в Монго.Мой коллега тогда отправил запрос на удаление, и я думаю, что это последнее, что было сделано.Я также обнаружил утечку памяти, если вам нужен патч.Этот модуль не разрабатывался с июля.Возможно, он не совместим с новым nginx.Мы активно используем это, поэтому, если я обнаружу, что он не совместим с .8x / Mongo 1.7.5, я исправлю это и сообщу вам.Тем временем я бы попросил сопровождающего на github.

Кроме того, 10gen не разработал эту программу, поэтому вы не сможете получить помощь от пользователя mongodb.Это не ошибка с Монго.Монго сильно изменился с июля, поэтому это тоже может быть проблемой.Плагин nginx использует драйвер Mongo C, который может быть устаревшим.Мы успешно используем его с nginx / 0.7.67 и mongo 1.6.5.

Запустите ваш mongo с подробным описанием (-vvv), а затем подключите журнал монго и нажмите его.Посмотрите, действительно ли ваш запрос выполняет монго-запрос и есть ли ошибки с этим

...