在heroku上的socket.io + node.js

我在编译一个socket.io应用程序在heroku有一些问题。

那是app.js文件

var app = require('express').createServer() , io = require('socket.io').listen(app.listen(process.env.PORT || 5000)); app.get('/', function (req, res) { res.sendfile(__dirname + '/index.html'); }); var users = []; io.configure(function () { io.set("transports", ["xhr-polling"]); io.set("polling duration", 10); }); io.sockets.on('connection', function (socket) { socket.on('message',function(data,time,username){ socket.broadcast.emit('message',data,time,username); socket.emit('message',data,time,username,true); }); socket.on('connected',function(username){ socket.nick = username; users.push(username); io.sockets.emit('user_connected',users); }); socket.on('disconnect',function(){ users.splice(users.indexOf(socket.nick), 1); socket.broadcast.emit('updated_user_list',users); }); }); 

的package.json

 { "name": "application-name", "version": "0.0.1", "private": true, "scripts": { "start": "node app" }, "engines": { "node": "0.8.x", "npm": "1.1.x" }, "dependencies": { "express": "3.0.0rc1", "jade": "*", "socket.io": "~0.9.8" } } 

这是推向heroku时的错误

 [gaggina:~/Desktop/socket2]→git push heroku master Counting objects: 1016, done. Delta compression using up to 4 threads. Compressing objects: 100% (892/892), done. Writing objects: 100% (1016/1016), 3.90 MiB | 104 KiB/s, done. Total 1016 (delta 74), reused 0 (delta 0) -----> Heroku receiving push -----> Node.js app detected -----> Resolving engine versions Using Node.js version: 0.8.3 Using npm version: 1.1.41 -----> Fetching Node.js binaries -----> Vendoring node into slug -----> Installing dependencies with npm npm WARN package.json application-name@0.0.1 No README.md file found! npm WARN package.json jade@0.26.3 No README.md file found! npm WARN package.json application-name@0.0.1 No README.md file found! npm WARN package.json jade@0.26.3 No README.md file found! npm WARN package.json connect@2.4.1 No README.md file found! npm WARN package.json methods@0.0.1 No README.md file found! npm WARN package.json hiredis@0.1.14 No README.md file found! > ws@0.4.21 install /tmp/build_3gzqoe2cjr234/node_modules/socket.io/node_modules/socket.io-client/node_modules/ws > node install.js [ws v0.4.21] Attempting to compile blazing fast native extensions. [ws v0.4.21] Native extension compilation successful! > hiredis@0.1.14 preinstall /tmp/build_3gzqoe2cjr234/node_modules/socket.io/node_modules/redis/node_modules/hiredis > make || gmake cd deps/hiredis && make static make[1]: Entering directory `/tmp/build_3gzqoe2cjr234/node_modules/socket.io/node_modules/redis/node_modules/hiredis/deps/hiredis' make[1]: Nothing to be done for `static'. make[1]: Leaving directory `/tmp/build_3gzqoe2cjr234/node_modules/socket.io/node_modules/redis/node_modules/hiredis/deps/hiredis' node-waf configure build Setting srcdir to : /tmp/build_3gzqoe2cjr234/node_modules/socket.io/node_modules/redis/node_modules/hiredis Setting blddir to : /tmp/build_3gzqoe2cjr234/node_modules/socket.io/node_modules/redis/node_modules/hiredis/build Checking for program g++ or c++ : /usr/bin/g++ Checking for program cpp : /usr/bin/cpp Checking for program ar : /usr/bin/ar Checking for program ranlib : /usr/bin/ranlib Checking for g++ : ok Checking for node path : not found Checking for node prefix : ok /tmp/node-node-de4o 'configure' finished successfully (1.834s) Waf: Entering directory `/Users/gaggina/Desktop/socket2/node_modules/socket.io/node_modules/redis/node_modules/hiredis/build' Waf: Leaving directory `/Users/gaggina/Desktop/socket2/node_modules/socket.io/node_modules/redis/node_modules/hiredis/build' Traceback (most recent call last): File "/tmp/node-node-de4o/bin/node-waf", line 16, in <module> Scripting.prepare(t, os.getcwd(), VERSION, wafdir) File "/tmp/node-node-de4o/bin/../lib/node/wafadmin/Scripting.py", line 145, in prepare prepare_impl(t, cwd, ver, wafdir) File "/tmp/node-node-de4o/bin/../lib/node/wafadmin/Scripting.py", line 135, in prepare_impl main() File "/tmp/node-node-de4o/bin/../lib/node/wafadmin/Scripting.py", line 188, in main fun(ctx) File "/tmp/node-node-de4o/bin/../lib/node/wafadmin/Scripting.py", line 386, in build return build_impl(bld) File "/tmp/node-node-de4o/bin/../lib/node/wafadmin/Scripting.py", line 405, in build_impl bld.compile() File "/tmp/node-node-de4o/bin/../lib/node/wafadmin/Build.py", line 268, in compile os.chdir(self.bldnode.abspath()) OSError: [Errno 2] No such file or directory: '/Users/gaggina/Desktop/socket2/node_modules/socket.io/node_modules/redis/node_modules/hiredis/build' make: *** [all] Error 1 sh: gmake: not found npm ERR! hiredis@0.1.14 preinstall: `make || gmake` npm ERR! `sh "-c" "make || gmake"` failed with 127 npm ERR! npm ERR! Failed at the hiredis@0.1.14 preinstall script. npm ERR! This is most likely a problem with the hiredis package, npm ERR! not with npm itself. npm ERR! Tell the author that this fails on your system: npm ERR! make || gmake npm ERR! You can get their info via: npm ERR! npm owner ls hiredis npm ERR! There is likely additional logging output above. npm ERR! System Linux 2.6.32-343-ec2 npm ERR! command "/tmp/node-node-de4o/bin/node" "/tmp/node-npm-Xp2N/cli.js" "rebuild" npm ERR! cwd /tmp/build_3gzqoe2cjr234 npm ERR! node -v v0.8.3 npm ERR! npm -v 1.1.41 npm ERR! code ELIFECYCLE npm ERR! stack Error: hiredis@0.1.14 preinstall: `make || gmake` npm ERR! stack `sh "-c" "make || gmake"` failed with 127 npm ERR! stack at ChildProcess.<anonymous> (/tmp/node-npm-Xp2N/lib/utils/exec.js:56:20) npm ERR! stack at ChildProcess.EventEmitter.emit (events.js:91:17) npm ERR! stack at Process._handle.onexit (child_process.js:674:10) npm ERR! npm ERR! Additional logging details can be found in: npm ERR! /tmp/build_3gzqoe2cjr234/npm-debug.log npm ERR! not ok code 0 ! Failed to rebuild dependencies with npm ! Heroku push rejected, failed to compile Node.js app To git@heroku.com:boiling-beyond-2052.git ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'git@heroku.com:boiling-beyond-2052.git' [gaggina:~/Desktop/socket2]→cat /tmp/build_3gzqoe2cjr234/npm-debug.log cat: /tmp/build_3gzqoe2cjr234/npm-debug.log: No such file or directory 

Heroku没有build立雇用。 原因是hiredis(node.js模块)依赖于需要GNU make的hiredis(C库),而这在你的slu not中是不可用的。

问题是,为什么NPM试图build立hiredis,而不是在你的依赖?

你应该检查hiredis是否出现在你项目的任何地方( grep -R hiredis . )。 另一种可能是Heroku试图提供redis到所有node.js应用程序?

我会检查Heroku的支持。

我正在遇到同样的问题,而与Heroku搞混了。 所有的path似乎都在那里。 运行Ubuntu 12.04,我甚至为gmake创build了一个sym链接。 没有什么解决它。 我最终尝试了这个

 "dependencies": { "express": "3.0.0rc2", "ejs": "*", "stylus": "*", "mongojs": "0.4.3" }, "bundledDependencies": { "socket.io": "*" }, 

代替

 "dependencies": { "express": "3.0.0rc2", "ejs": "*", "stylus": "*", "mongojs": "0.4.3", "socket.io": "*" }, 

这似乎解决了这个问题,使heroku快乐。 如果你find一个合适的解决scheme,请让我知道。

我已经发布了一个类似的问题在部署nodejs到heroku的答案,似乎已经解决了这个问题。

基本上尝试使用socket.io 0.9.6而不是0.9.8。

WAAAAAAAIT第二。

我注意到我运行grep -R hiredis ../node_modules/socket.io/node_modules目录下出现文件夹redis 。 显然, socket.io现在正在与内置的redis一起运行,与Heroku混淆。

尝试从socket.ionode_modules文件夹中删除redis文件夹。 我通过完全删除socket.io解决了这个问题。

当您在本地运行npm install ,hiredis会创build一些文件,其中包含特定于您机器的path。 当你将这些caching的依赖关系推送到Heroku时,构build失败。

 Waf: Entering directory `/Users/gaggina/Desktop/socket2/node_modules/socket.io/node_modules/redis/node_modules/hiredis/build' 

你可以通过从源代码控制中删除node_modules/hiredis目录来解决这个问题,让Heroku重新编译它:

 git rm -rf node_modules/hiredis rm -rf node_modules/hiredis echo "node_modules/hiredis" >> .gitignore 

我做了一些谷歌search,但无法find解决scheme,但我试图改变我的代码如下,它开始工作…

 var express = require('express'), app = express(), server = require('http').createServer(app), io = require('socket.io').listen(server), var port = process.env.PORT || 5000; // Use the port that Heroku provides or default to 5000 server.listen(port, function() { }); io.configure(function () { io.set("transports", ["xhr-polling"]); io.set("polling duration", 10); io.set("log level", 1); }); 

让我知道如果你同样的问题,仍然没有成功..