2

数日前にうまく動作していた次の node.js スクリプトがありますが、今ではこのエラーが発生します。

syd@HP-Notebook:~/Desktop$ node db.js
connected to database
{ [Error: Network error] code: 16 }
node: ../src/ioplugin.cc:496: virtual int Couchnode::IoOps::updateEvent(lcb_socket_t, void*, short int, void*, void (*)(lcb_socket_t, short int, void*)): Assertion `socket != __null' failed.
Aborted (core dumped)

db.js のコードは次のとおりです。

var crypto = require('crypto');
var db = require('couchbase');
var couchBase = null;
var committed = 0;
var intervalID = null;

function strGen(len) {

    var text = '';
    var charset = "abcdefghijklmnopqrstuvwxyz";

    for (var i = 0; i < len; i++) {
        text += charset.charAt(Math.floor(Math.random() * charset.length));
    }

    return text;
}

function numGen(len) {

    var text = '';
    var charset = "0123456789";

    for (var i = 0; i < len; i++) {
        text += charset.charAt(Math.floor(Math.random() * charset.length));
    }

    return text;
}

function newLat() {
    var lat = Math.floor((Math.random() * 2)+1);
    if (lat == 1) return 37;
    return 38;
}

function createDocument() {

    var name = 'Test user #' + committed;
    var licensePlates = strGen(3).toUpperCase() +'-'+ numGen(4);
    var lat = parseFloat(newLat() + '.' + numGen(8));
    var lng = parseFloat('23.' + numGen(8))

    var timestamp = (new Date()).getTime().toString();
    var docKey =  crypto.createHash('md5').update(licensePlates + '-' + name).digest('hex');

    var docData = {
        '_id' : docKey,
        'name' : name,
        'lp' : licensePlates,
        'lat' : lat,
        'lng' : lng,
        'timestamp': timestamp 
    }

    //console.log(docKey);

    //console.log(docData);

    couchBase.set(docKey, JSON.stringify(docData), function(err){
        if (err) { 
            console.log(err); 
        } else if (committed < 1000) {
            committed++;
            console.log('#'+committed + ' - ' + ' Committed: ' + docKey);
        } else {
            clearInterval(intervalID);
            console.log('I\'m done!');
        }
    });

}

db.connect({
    'user':'taxi',
    'password':'taxi',
    'hosts':['127.0.0.1:8091'],
    'bucket':'taxi'
}, function(err, cb) {
    if (err) {
        console.log('TEST');
        console.log(err);
    } else {
        couchBase = cb;
        console.log('connected to database');
        intervalID = setInterval(function(){createDocument(null, null, null)}, 5);
    }
});

過去に何の問題もありませんでした。これは、ubuntu 12.04 に php 5.4 をインストールしてから php 5.3 に戻った後に発生しました。参考までにphpとcouchbaseは現時点では問題なく動作しますが、ノードでは動作しません。ご覧のとおり、データベースとの接続は確立されていますが、set ステートメントは失敗しています。どんな情報でも大歓迎です。

アップデート

別のスクリプトからの同じエラーを次に示します。

syd@HP-Notebook:~/Desktop$ node test.js
Connection established!
Function: get
Network error
Error: Network error
    at makeError (/home/syd/node_modules/couchbase/lib/bucket.js:578:18)
    at getParsedHandler (/home/syd/node_modules/couchbase/lib/bucket.js:625:17)
node: ../src/ioplugin.cc:496: virtual int Couchnode::IoOps::updateEvent(lcb_socket_t, void*, short int, void*, void (*)(lcb_socket_t, short int, void*)): Assertion `socket != __null' failed.
Aborted (core dumped)

このスクリプトとソースに関する詳細については、こちらをご覧ください

PS memcache は、取得および設定できる node.js で正常に動作しています。カウチノード/カウチベースが失敗しています!

4

1 に答える 1

3

Couchbase C ライブラリは最近 2.1.1 に更新されましたが、node.js ライブラリは更新されていません。C ライブラリの最新の動作バージョンは 2.0.7 です。ダウンロードするには、リンクのバージョン番号をオフから置き換えるだけです。サイトを 2.0.7 に。

また、couchbase バグトラッカーで問題を作成しました。修正されることを願っています。

UPD:新しいcouchbase nodejsライブラリ リリース: 1.0.0-betaで修正されました。

于 2013-08-23T11:42:22.597 に答える