I'm having some issues in compiling a socket.io app on heroku.
Thats the app.js file
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"
}
}
And that's the error when pushing it to 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
WAAAAAAAIT A SECOND.
I noticed after I ran
grep -R hiredis .
that under the directory./node_modules/socket.io/node_modules
there appears the folderredis
. Apparently,socket.io
is now shipping withredis
built in, which messes with Heroku.Try fooling around with removing the
redis
folder fromsocket.io
'snode_modules
folder. I solved the issue by removing socket.io altogether.Heroku is failing to build hiredis. The reason is that hiredis (the node.js module) depends on hiredis (the C library), which needs GNU make, which is not available on your slug.
Question is, why is NPM trying to build hiredis while it's not in your dependencies ?
You should check if hiredis appears anywhere in your project (
grep -R hiredis .
). Another possibility is that Heroku is trying to provide redis to all node.js apps ?I'd check with Heroku's support.
When you run
npm install
locally, hiredis creates some files with paths that are specific to your machine. When you push these cached dependencies to Heroku, the build fails.You can get around this problem by removing the
node_modules/hiredis
directory from source control, letting Heroku compile it anew:I was running into the same problem while messing around with heroku. All the paths seemed to be there. Running Ubuntu 12.04 and I even created a sym link for gmake. Nothing fixed it. I tried this eventually
instead of
and this seemed to fix it and make heroku happy. If you find a proper solution, do let me know.
I've posted an answer to a similar question at deploy nodejs to heroku and that seems to have solved the problem.
Basically try using socket.io 0.9.6 instead of 0.9.8.
I did some googling but cant find the solution, But i tried to change my code as below and it started to work...
let me know if you same issue and still not getting success..