2011-02-05 4 views
0

J'essayais de mettre en place la configuration gridfs/nginx/mongo mais je reçois des erreurs étranges.bug nginx mongo et gridfs

J'ai essayé avec nginx 0.8.53 et 0.8.54 et le dernier mongo 1.6.5 64bits sur le dernier Ubuntu. avec module Compiler GridFS a bien fonctionné: 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; 
    } 
} 

je reçois une réponse vide lorsque je tente de chercher un fichier:

curl -X GET -i 'http://media.foo.com/gridfs/4d4d526cea26b05041000015' 
curl: (52) Empty reply from server 

Mon 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" 

Tous suggestion est la bienvenue :)

+0

Je recommanderais soit de demander à la liste de diffusion des utilisateurs MongoDB ou de déposer un problème à leur Jira. –

+0

J'ai en fait piraté le module gridFS pour accéder à autre chose dans mongo. Mon collègue a alors soumis une demande de retrait, et je pense que c'est la dernière chose qui a été faite. J'ai trouvé une fuite de mémoire aussi si vous voulez le patch. Ce module n'a pas été développé depuis juillet. Il se pourrait qu'il ne soit pas compatible avec le nouveau nginx. Nous utilisons cela fortement, donc si je trouve qu'il n'est pas compatible avec .8x je vais le réparer et vous le faire savoir. Je demanderais au mainteneur sur github en attendant. –

Répondre

1

J'ai en fait piraté le module gridFS pour accéder à autre chose à mongo. Mon collègue a alors soumis une demande de retrait, et je pense que c'est la dernière chose qui a été faite. J'ai trouvé une fuite de mémoire aussi si vous voulez le patch. Ce module n'a pas été développé depuis juillet. Il se pourrait qu'il ne soit pas compatible avec le nouveau nginx. Nous utilisons ceci fortement, donc si je trouve que ce n'est pas compatible avec .8x/Mongo 1.7.5, je vais le réparer et vous le faire savoir. Je demanderais au mainteneur sur github en attendant.

De plus, ceci n'est pas développé par 10gen, vous ne pourrez peut-être pas obtenir d'aide sur mongodb-user. Ce n'est pas un bug avec Mongo. Mongo a beaucoup changé depuis juillet, ce qui peut aussi poser problème. Le plugin nginx repose également sur le pilote mongo C qui peut être obsolète. Nous l'utilisons avec succès avec nginx/0.7.67 et mongo 1.6.5. Lancez votre mongo avec verbose (-vvv) et mettez le journal mongo en queue et appuyez dessus. Si votre demande est en fait faire une requête mongo et s'il y a des erreurs avec ce

+0

C'est intéressant, puis-je avoir le lien de patch? :) – coulix

+1

Michael, ce serait génial de voir ta fourchette sur GitHub! –

1

Ok je trouve la racine du problème,

Mes fichiers étaient vides. Utiliser mongoengine python GridFsProxy read() me donne 0 mais je pourrais encore les voir dans la collection mongoterm, db.fs.files avec une taille différente de 0:/

J'ai regardé où j'ajoutais des fichiers dans mon code de test et voici ce que je trouve:

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) 

images bûche étaient valides, mais tous les autres où vides résultant du bogue mentionné précédemment. Modification de la position de fichiers instanciation à:

# 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) 

complètement résolu le problème.

La conclusion est qu'il existe probablement un problème quelque part dans le mongoengine. Je vais essayer verbose (-vvv) sur mongo afin de localiser le problème.