0

ローカルおよびサーバーで簡単に実行できるように、(JavaScript で) データベース作成スクリプトを作成しました。コマンドラインから実行したいので、サーバー/ギアにプッシュして実行するだけです。スクリプトはローカルでは正常に実行されますが、OpenShift ギアで実行しようとすると、次のエラーが発生します。

MongoDB shell version: 2.4.9
connecting to: 127.XX.XXX.X:27017/admin
Sat Sep 12 12:20:25.979 count failed: { "ok" : 0, "errmsg" : "unauthorized" } 
at src/mongo/shell/query.js:180
failed to load: ./Create.js

コマンドを実行しようとしています:

[xxxxxx-xxxxxx.rhcloud.com scripts]\> mongo ./Create.js

ファイルの内部を含めました。ドキュメント作成のすべてを省きました。ドキュメントを配列に追加したことを知っておいてください。

// Switch to the DB we want
var connection;
try {
    // Try to connect to local first
    connection = new Mongo();
}
catch(err) {
    // If error, connect to OpenShift server
    connection = new Mongo('127.XX.XXX.X:27017');
}

db = connection.getDB('xxxxxxx');

// Create array to store documents
var newDocs = [];

...
// Documents are added to newDocs here
...

// If any new documents exist, insert them
if(newDocs.length) {
    var bulk = db.xxxxxxx.initializeUnorderedBulkOp();

    newDocs.forEach(function (doc) {
        bulk.insert(doc);
    });

    bulk.execute();
    print('NEW DOCS INSERTED');
}
else {
    print('NO NEW DOCS');
}
4

2 に答える 2

0

db.auth('username', 'password');認証していました。最終的に、スクリプトをローカルで実行しているかサーバーで実行しているかを追跡する変数をスクリプトに追加しました。次に、パスワードに変数を使用して、DB パスワードがスクリプトにぶら下がっていないようにしました。オプションを使用してコマンドラインからパスワードを渡し--evalます。スクリプトの変更されたヘッドは次のとおりです。

// Switch to the DB we want
var connection;
var isLocal = true;
try {
    // Try to connect to local first
    connection = new Mongo();
}
catch(err) {
    // If error, connect to OpenShift server
    connection = new Mongo('127.XX.XXX.X:27017');
    isLocal = false;
}

db = connection.getDB('xxxxxxx');

if(!isLocal) {
    // If on server, authenticate
    db.auth('username', password);
}

// Create array to store documents
var newDocs = [];

次に、サーバーのコマンド ラインからスクリプトを実行するために、次のコードを使用します。

mongo --eval "var password = 'xxxxxxx';" Create.js
于 2015-09-17T03:57:23.543 に答える