错误 运行 MongoDB OpenShift Gear 脚本
Error Running MongoDB Script on OpenShift Gear
我编写了一个数据库填充脚本(在 JavaScript 中),以便我可以轻松地 运行 在我的本地和服务器上使用它。我想从命令行 运行 它,这样我所要做的就是将它推到 server/gear 并执行它。脚本 运行 在我的本地运行良好,但是当我尝试在 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');
}
看起来您缺少 username/password 连接到 openshift 上的 mongodb 数据库?看看你得到的错误 "unauthorized..."
我使用了db.auth('username', 'password');
进行身份验证。最终,我向脚本添加了一个变量以跟踪我是在本地还是在服务器上 运行ning 脚本。然后我为密码使用了一个变量,这样我就不会在脚本中挂出数据库密码。我使用 --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
我编写了一个数据库填充脚本(在 JavaScript 中),以便我可以轻松地 运行 在我的本地和服务器上使用它。我想从命令行 运行 它,这样我所要做的就是将它推到 server/gear 并执行它。脚本 运行 在我的本地运行良好,但是当我尝试在 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');
}
看起来您缺少 username/password 连接到 openshift 上的 mongodb 数据库?看看你得到的错误 "unauthorized..."
我使用了db.auth('username', 'password');
进行身份验证。最终,我向脚本添加了一个变量以跟踪我是在本地还是在服务器上 运行ning 脚本。然后我为密码使用了一个变量,这样我就不会在脚本中挂出数据库密码。我使用 --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