我在这里得到了很多人的帮助,现在我想回馈。对于那些无法使Node.js服务器在MongoDB中工作的人来说,这是我所做的。如何在EC2环境中使用node-mongodb-native在Node.js服务器上设置MongoDB?
回答
这最初由问题提问者发布。一个国防部在评论中要求他将其作为答案张贴,但没有得到任何回应。所以,我把它清理干净并自己发布。
当您查看代码时,您会注意到createServer
代码位于db.open
之内。如果您将其撤消,它将不起作用。另外,请不要关闭的db连接。否则,第一次后,db连接将不会再次打开。 (当然,db.open
是在createServer
之外宣布的。)我不知道为什么createServer
在db.open
之内。我想这可能与不打开太多的数据库连接有关?
另外,我面对的一个问题是,当我通过SSH运行它时,即使我在后台运行服务器(例如$ node server.js &
),2.5小时后,服务器也会死亡(不是实例)。我不确定是因为终端连接还是什么。
下面是该过程&代码
环境:EC2,AMS-Linux的AMI
宗旨:以一个HTTP请求,日志查询,IP和时间戳到MongoDB的。
步骤
1)创建实例(服务器)后,安装gcc。
$ yum install gcc-c++
2)下载Node.js文件并解压缩它们。 (我用的2.6版。)
$ curl -O http://nodejs.org/dist/node-v0.2.6.tar.gz
$ tar -xzf node-v0.2.6.tar.gz
我改名解压缩文件夹只是“的NodeJS”
$ cd nodejs
$ sudo ./configure --without-ssl
$ sudo make
$ sudo make install
make
需要很长一段时间....之后,你可以尝试在运行中的NodeJS样本.org
3)安装MongoDB。我安装了版本1.6.5,而不是1.7。
$ curl -O http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.6.5.tgz
$ tar -xzf mongodb-linux-x86_64-1.6.5.tgz
$ sudo mkdir /data/db/r01/
我改名为“MongoDB的”
运行数据库程序的文件夹:
$ ./mongodb/bin/mongod --dbpath /data/db/r01/
然后,如果你愿意,你可以运行并尝试在命令行。请参阅MongoDB的网站。
4)我建议您根据您的实例创建您自己的AIM。这将需要20分钟。然后,重新安装并再次运行MongoDB。
5)安装node-mongodb-native
$ curl -O https://download.github.com/christkv-node-mongodb-native-V0.8.1-91-g54525d8.tar.gz
$ tar -xzf christkv-node-mongodb-native-V0.8.1-91-g54525d8.tar.gz
我重命名的文件到node-mongodb-native
$ cd node-mongodb-native
$ make
6)在此是服务器的代码:
GLOBAL.DEBUG = true;
global.inData = '';
var http = require('http');
sys = require("sys");
/* set up DB */
var Db = require('./node-mongodb-native/lib/mongodb').Db,
Connection = require('./node-mongodb-native/lib/mongodb').Connection,
Server = require('./node-mongodb-native/lib/mongodb').Server,
BSON = require('./node-mongodb-native/lib/mongodb').BSONNative;
var host = process.env['MONGO_NODE_DRIVER_HOST'] != null ? process.env['MONGO_NODE_DRIVER_HOST'] : 'localhost';
var port = process.env['MONGO_NODE_DRIVER_PORT'] != null ? process.env['MONGO_NODE_DRIVER_PORT'] : Connection.DEFAULT_PORT;
var db = new Db('test01', new Server(host, port, {}), {native_parser:true});
db.open(function(err, db) {
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
global.inData = {'p':'', 'url':''};
// get IP address
var ipAddress = req.connection.remoteAddress;
global.inData.ip = ipAddress;
// date time
var d = new Date();
var ts = d.valueOf();
global.inData.ts = ts;
// get the http query
var qs = {};
qs = require('url').parse(req.url, true);
if (qs.query !== null) {
for (var key in qs.query) {
if (key == 'p') {
global.inData.p = qs.query[key];
}
if (key == 'url') {
global.inData.url = qs.query[key];
}
}
}
if (global.inData.p == '' && global.inData.url == '') {
res.end("");
} else {
db.collection('clickCount', function(err, collection) {
if (err) {
console.log('is error \n' + err);
}
collection.insert({'p':global.inData.p,
'url':global.inData.url,
'ip':global.inData.ip,
'ts':global.inData.ts});
res.end("");
//db.close(); // DO NOT CLOSE THE CONNECTION
});
}
}).listen(8080);
});
console.log('Server running at whatever host :8080');
这可能不是完美代码,但它运行。我仍然不习惯“嵌套”或LISP类型的编码风格。这就是为什么我欺骗并使用global.inData
来传递数据。 :)
不要忘记把res.end("")
放在适当的位置(你认为HTTP请求呼叫应该结束)。
顺便说一下,我上面发布的答案适用于CentOS和Fedora。
对于谁拥有Ubuntu的人,那就是:
如上所述# for Gcc
$ sudo apt-get install build-essential
# for SSL
$ sudo apt-get install libssl-dev
然后,只需安装的node.js和MongoDB。
此外,发展几个月后,我发现使用“故宫”,“表达”和“猫鼬”可以把我的生活变得更加容易。另外,我安装了其他工具,如调试器。
# Install Node Package Manager
$ sudo curl http://npmjs.org/install.sh | sh
# for debugging
$ sudo npm install node-inspector
# for Profiling
$ sudo npm install profile
# Install Express, the Node.js framework
$ sudo npm install express
# Install Template Engines (Now, let’s install Jade, jQuery Templates and EJS. You can pick the one you want)
$ sudo npm install jade jqtpl ejs
# XML related, install node-expat and then node-xml2js-expat
$ sudo apt-get install -y libexpat1-dev
$ sudo npm install node-xml2js
$ sudo npm install xml2js-expat
# Install Mongoose, (Mongo Driver)
$ sudo npm install mongoose
参考: http://npmjs.org
它看起来像有可能是一个错误。它不会让我在使用VAR的第一个参数:内部B collection.insert({
它是治疗第一agument为“A”或A,硬编码,无论哪种方式
。我将研究这个问题并在github上发布一个修复程序
- 1. 如何在ECS(EC2容器服务)环境中设置hazelcast?
- 2. 如何使用puppet在服务器上设置环境变量?
- 3. 在Eclipse中设置服务器环境
- 4. 如何在Windows中为Node.js/MongoDB设置开发环境?
- 5. 如何设置node.js开发环境/服务器(Ubuntu 11.04)
- 6. String.toLocaleUpperCase():在Node.js上设置语言环境
- 7. 如何设置在线服务器的Java运行时环境
- 8. 如何使用git在服务器上分离生产环境/开发环境?
- 9. 在WebStorm中设置Node.js环境变量
- 10. 如何在EC2容器服务上设置neo4j
- 11. 在Nginx服务器上设置Django站点的环境变量
- 12. 无法在vanilla Ubuntu服务器上设置Python环境
- 13. 在开发环境和SQL服务器上在实时环境中使用MySQL
- 14. 无法在亚马逊EC2上使用HTTPS Node.js服务器
- 15. 如何在托管服务器(如Hostinger,JustHost等)上设置node.js?
- 16. 在ec2 node.js服务器上托管SSL证书的位置
- 17. 在亚马逊ec2服务器上为使用条纹的网站设置环境变量
- 18. 如何在Supervisor服务中设置环境变量
- 19. 如何在亚马逊网络服务EC2实例上设置TURN服务器
- 20. 如何在MySQL服务器上设置Node.js和Websockets?
- 21. 在AWS EC2和S3中使用ELK设置日志服务器
- 22. 如何在Meteor的远程服务器上设置环境变量
- 23. 设置环境变量在服务器上使用本地主机,并在开发机器上使用FQDN
- 24. 在应用开发服务器环境覆盖邮件设置
- 25. 如何$在node.js中设置mongoDB游标?
- 26. 在Rails的Webrick服务器中设置环境变量
- 27. 在开发环境中设置虚拟代理服务器
- 28. 如何设置服务器运行Node.js?
- 29. 如何使用MongoHQ和Node.js在Heroku上设置MongoDB?
- 30. EC2服务器或AWS SimpleDB上的MongoDB?
顺便说一句,这只是冰山一角,我仍然需要探索1)如何制作复制mongoDB,2)如何在本地复制mongoDB,3 )如何实现分片,4)多实例和负载均衡,5)如何使用nodejs服务器管理多个实例,6)如何管理每个实例中的本地数据。有很多事情我必须查找。 :)如果您有任何参考,请让我知道。 – murvinlai 2011-01-25 01:19:47
负载均衡使用HAProxy:http://stackoverflow.com/questions/4360221/haproxy-websocket-disconnection/4737648#4737648 – 2011-01-25 03:08:03
如果您计划使用HAProxy负载平衡您的节点应用程序,需要在自己的实例上运行mongodb。它可以很容易地分解你的数据库。 – 2011-01-25 03:09:19