Ubuntu 安装 pm2 报错求解释
发布于 11 年前 作者 zhs077 7905 次预览 最后一次回复是 11 年前 来自
zhs[@ubuntu](/user/ubuntu):~/Desktop/node-v0.10.26$ pm2 -V
0.7.8
zhs[@ubuntu](/user/ubuntu):~/Desktop/node-v0.10.26$ pm2 start
/usr/local/lib/node_modules/pm2/bin/pm2:383
fs.exists(cst.DEFAULT_FILE_PATH, function(exist) {
^
TypeError: Object #<Object> has no method 'exists'
at init (/usr/local/lib/node_modules/pm2/bin/pm2:383:6)
at Object.<anonymous> (/usr/local/lib/node_modules/pm2/bin/pm2:403:3)
at Module._compile (module.js:446:26)
at Object..js (module.js:464:10)
at Module.load (module.js:353:32)
at Function._load (module.js:311:12)
at Array.0 (module.js:484:10)
at EventEmitter._tickCallback (node.js:190:39)
18 回复
楼主的代码没标记, 我给标记了… Markdown 啊… 提示错误的
exists方法不存在, 两种可能, 1, 低版本的 Node 没有这个方法… 看上边可能是0.10, 应该不会啊 2, 要么是fs对象被什么覆盖了, 检查下对象是不是对的? 另外pm2 start不是应该加参数再跑的么?pm2 -V表示你以及装上pm2了cd到你要启动脚本的文件夹,
pm2 start xxx.js就好了pm2 start 后边应该跟上 需要执行的脚本哈
现在pm2 -v -start都报这个错蛋疼。
@zhs077 爱莫能助啊, 列更多细节吧… 比如怎么装的 Node, 怎么装的 pm2 , 想运行什么之类的… 看看能不能发现有可能出问题的地方
zhs@ubuntu:~/pm2_test$ ls a.js zhs@ubuntu:~/pm2_test$ sudo pm2 start a.js [sudo] password for zhs:
/usr/local/lib/node_modules/pm2/bin/pm2:383 fs.exists(cst.DEFAULT_FILE_PATH, function(exist) {
@jiyinyiyong Node 用源码安装的,版本最新的10.26,安装PM2使用的是国内的镜像,安装没报错。
pm2
0.7.8源码也就是这里: https://github.com/Unitech/pm2/blob/0.7.8/bin/pm2#L383 对应楼主的这里/usr/local/lib/node_modules/pm2/bin/pm2:383打开文件, 在这一行之前插入下面的代码看看结果怎么样吧:[ ‘Stats’, ‘readFile’, ‘readFileSync’, ‘close’, ‘closeSync’, ‘open’, ‘openSync’, ‘read’, ‘readSync’, ‘write’, ‘writeSync’, ‘rename’, ‘renameSync’, ‘truncate’, ‘truncateSync’, ‘rmdir’, ‘rmdirSync’, ‘fdatasync’, ‘fdatasyncSync’, ‘fsync’, ‘fsyncSync’, ‘mkdir’, ‘mkdirSync’, ‘sendfile’, ‘sendfileSync’, ‘readdir’, ‘readdirSync’, ‘fstat’, ‘lstat’, ‘stat’, ‘fstatSync’, ‘lstatSync’, ‘statSync’, ‘readlink’, ‘readlinkSync’, ‘symlink’, ‘symlinkSync’, ‘link’, ‘linkSync’, ‘unlink’, ‘unlinkSync’, ‘fchmod’, ‘fchmodSync’, ‘chmod’, ‘chmodSync’, ‘fchown’, ‘fchownSync’, ‘chown’, ‘chownSync’, ’_toUnixTimestamp’, ‘utimes’, ‘utimesSync’, ‘futimes’, ‘futimesSync’, ‘writeFile’, ‘writeFileSync’, ‘watch’, ‘watchFile’, ‘unwatchFile’, ‘realpathSync’, ‘realpath’, ‘createReadStream’, ‘ReadStream’, ‘FileReadStream’, ‘createWriteStream’, ‘WriteStream’, ‘FileWriteStream’, ‘SyncWriteStream’ ] ‘v0.6.19’
@zhs077 就是说你的 Node 实际上是
0.6… 重装吧process.version是打印 Node 版本的代码…@jiyinyiyong node -v 是0.10.26 啊
ubuntu server会有这个问题,解决的方式是这样的,你先用npm install pm2在当前文件夹中,然后将这个文件夹移动到全局的文件夹里面,然后修改文件夹的权限就可以了。
@zhs077 不知道怎么回事… Node 命令行里的
process.version显示是多少? 这个调用很奇怪啊… 有没有可能实际上你装了两个 Node, 然后因为不同调用者, Bash 中的环境变量不一样, 结果调用了不同的node命令我用ubuntu不是server版本的按照你的方式还是不行
@jiyinyiyong 我那台ubuntu装的node版本都是10以上的不会是8的。
@zhs077 你的代码显示是
0.6.19, 这个看你自解解决了…@jiyinyiyong 唉,个人怀疑是PM2的bug,我centeOS安装时候就报错了。。。
@zhs077 我刚才说的有点问题,先要在当前文件安装pm2,这步骤出问题就撞墙死了吧.然后将node_modules下的pm2移动到node的全局node_modules里面,例如0.11.9/node_modules这样的路径之下,然后在node的bin目录下用ln命令将node_modules中的pm2/bin目录下的pm2的可执行程序链接到node的bin目录中就可以了。