0

gridfs / nginx / mongoのセットアップを配置しようとしましたが、奇妙なエラーが発生します。

最新のUbuntuでnginx0.8.53と0.8.54、および最新のmongo1.6.564ビットを試してみました。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"

どんな提案でも大歓迎です:)

4

2 に答える 2

1

問題の根本を見つけました。

私のファイルは空でした。mongoengine python GridFsProxy read()を使用すると0が返されますが、サイズが0とは異なるmongoterm、db.fs.filesコレクションでそれらを確認できます:/

テストコードのどこにファイルを追加しているかを調べたところ、次のようになりました。

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のどこかに問題があるということです。問題を特定するために、mongoでverbose(-vvv)を試してみます。

于 2011-02-06T20:58:45.670 に答える
1

私は実際に gridFS モジュールをハッキングして、mongo の他の何かにアクセスしました。その時、私の同僚がプル リクエストを送信しました。それが最後に行われたことだと思います。パッチが必要な場合は、メモリリークも見つかりました。このモジュールは 7 月以降開発されていません。新しいnginxと互換性がない可能性があります。これを頻繁に使用しているため、.8x/Mongo 1.7.5 と互換性がないことがわかった場合は、修正してお知らせします。それまでの間、github のメンテナーに質問します。

また、これは 10gen によって開発されたものではないため、mongodb-user に関するヘルプが得られない場合があります。これは Mongo のバグではありません。Mongo は 7 月から大きく変わったので、それも問題かもしれません。nginx プラグインは、古くなっている可能性がある mongo C ドライバーにも依存しています。nginx/0.7.67 と mongo 1.6.5 で正常に使用しています。

詳細 (-vvv) を指定して mongo を実行し、mongo ログを追跡してヒットします。リクエストが実際にmongoクエリを作成しているかどうか、およびそれにエラーがあるかどうかを確認してください

于 2011-02-06T15:35:33.510 に答える