我在NodeJS中有一个项目。我已经构建了一个基于ExpressJS,SocketIO,MongoDB的框架,它在本地版本中运行良好。
我试图在DigitalOcean Droplet(Debian)上部署这个项目;我已经安装了所需的一切(npm,node,mongo)。它开始启动守护进程,我遇到了一个很大的错误。
要启动我的应用,我使用npm start
以及以下脚本
"scripts": {
"start": "./node_modules/.bin/supervisor DEBUG=unicorn ./bin/www"
}
然后它就像那样
Starting child process with 'node ./bin/www'
01:59:19 - info: Try to connect to MongoDB via Mongoose ...
01:59:19 - info: Loading Socket.io module ...
Option log level is not valid. Please refer to the README.
01:59:19 - info: Reboot system initialized (pre_starters)
01:59:19 - info: --------------------
01:59:19 - info: Unicorn (Black Mamba (0.0.4a))
01:59:19 - info: -> Welcome aboard !
01:59:19 - info: -> Your app is ready to use.
01:59:19 - info: --------------------
01:59:19 - info: Express server listening on port 8003
events.js:72
throw er; // Unhandled 'error' event
^
Error: ENOENT, open 'logs/app.log'
Program node ./bin/www exited with code 8
所以我现在正在寻找一个解决方案超过3个小时,人们说这通常是因为端口很忙,我检查了他们使用的所有进程和端口,但什么都没发现。
我也尝试更改Express和SocketIO(80,8080,3000等)的端口,但它没有改变任何东西......
你还有其他想法吗?或者更好的神奇解决方案?谢谢大家;)
PS:我也从服务器上做了一个干净的npm install
,从本地版本到服务器的软件包兼容性没有问题。
答案 0 :(得分:3)
问题在于:
Error: ENOENT, open 'logs/app.log'
这意味着您的脚本正在尝试打开日志文件但失败了。由于错误未被捕获,脚本崩溃。
我的猜测是它没有在你假设的目录中启动(一个logs/
作为子目录的目录)。因此,您应该确保您的脚本是在正确的目录中启动的,或者您应该使用日志文件的绝对路径。