2012-07-26 99 views
4

我在編譯heroku上的socket.io應用程序時遇到了一些問題。heroku上的socket.io + node.js

多數民衆贊成在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 [email protected] No README.md file found! 
     npm WARN package.json [email protected] No README.md file found! 
     npm WARN package.json applicatio[email protected] No README.md file found! 
     npm WARN package.json [email protected] No README.md file found! 
     npm WARN package.json [email protected] No README.md file found! 
     npm WARN package.json [email protected] No README.md file found! 
     npm WARN package.json [email protected] No README.md file found! 

     > [email protected] 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! 

     > [email protected] 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! [email protected] preinstall: `make || gmake` 
     npm ERR! `sh "-c" "make || gmake"` failed with 127 
     npm ERR! 
     npm ERR! Failed at the [email protected] 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: [email protected] 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 [email protected]:boiling-beyond-2052.git 
! [remote rejected] master -> master (pre-receive hook declined) 
error: failed to push some refs to '[email protected]: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 
+0

可能有些你正在推動的Heroku的文件指的路徑 「/Users/gaggina/Desktop/socket2/node_modules/socket.io/node_modules/redis/node_modules/hiredis/build」 試圖找到文件。 – Vivek 2012-08-01 07:39:28

回答

2

的Heroku未能建立hiredis時的錯誤。原因是hiredis(node.js模塊)依賴於需要GNU make的hiredis(C庫),而這在你的slu not中是不可用的。

的問題是,爲什麼NPM試圖建立hiredis雖然它不是在你的依賴?

如果hiredis在您的項目(grep -R hiredis .)出現在任何地方,您應該檢查。另一種可能是Heroku試圖向所有node.js應用程序提供redis?

我與Heroku的支持檢查。

0

我也陷入了同樣的問題,而與Heroku的瞎搞。所有的路徑似乎都在那裏。運行Ubuntu 12.04,我甚至爲gmake創建了一個sym鏈接。沒有什麼修復它。 我試過的

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

這最終

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

代替,這似乎解決它,使Heroku的快樂。如果你找到一個合適的解決方案,請讓我知道。

0

我已經在deploy nodejs to heroku上發佈了類似問題的答案,而且似乎解決了這個問題。

基本上嘗試使用socket.io 0.9.6,而不是0.9.8。

0

WAAAAAAAIT A SECOND。

我注意到我運行grep -R hiredis .後,在目錄./node_modules/socket.io/node_modules下面出現文件夾redis。顯然,socket.io現在出貨redis內置,與Heroku混亂。

試試鬼鬼祟祟地從socket.ionode_modules文件夾中刪除redis文件夾。我通過完全刪除socket.io來解決問題。

0

當您運行npm install本地,hiredis創建具有特定於您的機器路徑的一些文件。當你將這些緩存的依賴關係推送到Heroku時,構建失敗。

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 
0

我做了一些谷歌上搜索,但不能找到解決辦法,但我試圖改變我的代碼如下,並開始工作......

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); 
}); 

讓我知道如果你同樣的問題,仍然沒有得到成功..