他の人が書いたNode.jsのアプリケーションを手元のMacOS(10.14.6 Mojave)のローカルで動かしてみたいのですが
terminal
1$ node app.js
をすると、このようなエラーが出てしまします。
terminal
1/Users/bariko/appfile/node_modules/fs-extra/lib/mkdirs/mkdirs-sync.js:45 2 throw err0 3 ^ 4 5Error: EACCES: permission denied, mkdir '/var/log/nodejs/system' 6 at Object.mkdirSync (fs.js:914:3) 7 at Object.mkdirsSync (/Users/bariko/appfile/node_modules/fs-extra/lib/mkdirs/mkdirs-sync.js:31:9) 8 at DateRollingFileStream._renewWriteStream (/Users/bariko/appfile/node_modules/streamroller/lib/RollingFileWriteStream.js:225:8) 9 at new RollingFileWriteStream (/Users/bariko/appfile/node_modules/streamroller/lib/RollingFileWriteStream.js:74:10) 10 at new DateRollingFileStream (/Users/bariko/appfile/node_modules/streamroller/lib/DateRollingFileStream.js:23:5) 11 at appender (/Users/bariko/appfile/node_modules/log4js/lib/appenders/dateFile.js:25:19) 12 at Object.configure (/Users/bariko/appfile/node_modules/log4js/lib/appenders/dateFile.js:55:10) 13 at /Users/bariko/appfile/node_modules/log4js/lib/appenders/index.js:63:27 14 at Object.onlyOnMaster (/Users/bariko/appfile/node_modules/log4js/lib/clustering.js:85:50) 15 at createAppender (/Users/bariko/appfile/node_modules/log4js/lib/appenders/index.js:61:21) 16 at /Users/bariko/appfile/node_modules/log4js/lib/appenders/index.js:77:25 17 at Array.forEach (<anonymous>) 18 at setup (/Users/bariko/appfile/node_modules/log4js/lib/appenders/index.js:75:33) 19 at /Users/bariko/appfile/node_modules/log4js/lib/configuration.js:46:33 20 at Array.forEach (<anonymous>) 21 at Object.configure (/Users/bariko/appfile/node_modules/log4js/lib/configuration.js:46:13) { 22 errno: -13, 23 syscall: 'mkdir', 24 code: 'EACCES', 25 path: '/var/log/nodejs/system' 26}
そこで、
terminal
1$ sudo cd /var/log/nodejs/system
をしてみた後に、また
terminal
1$ node app.js
をすると、また同じエラーが出てしまします。
しかし、
terminal
1$ sudo cd /var/log/nodejs/system
をしてみると
terminal
1mkdir: /var/log/nodejs/system: File exists
となって、先ほど作ったのでそのファイルあるよ、となってしまいます。
ちなみにこのnode.jsのファイルは本番(AWS)では
nodeのバージョンが10.16.3
で動いているそうです。
私の手元のnodeは12なのでそれが良くないのでしょうか…
ずっとここでつまづいているのでアドバイスをいただけると幸いです。
どうぞよろしくお願いします。
追記
「sudo chmod 777 /var/log/nodejs/system すればとりあえず動くのでは」というご指摘を受け、
terminal
1$ sudo chmod 777 /var/log/nodejs/system 2$ node app.js
を試してみました。
しかし、やはり以下のような同じエラーが出てしまいました。
terminal
1/Users/bariko/appfile/node_modules/fs-extra/lib/mkdirs/mkdirs-sync.js:45 2 throw err0 3 ^ 4 5Error: EACCES: permission denied, mkdir '/var/log/nodejs/system' 6 at Object.mkdirSync (fs.js:914:3) 7 at Object.mkdirsSync (/Users/bariko/appfile/node_modules/fs-extra/lib/mkdirs/mkdirs-sync.js:31:9) 8 at DateRollingFileStream._renewWriteStream (/Users/bariko/appfile/node_modules/streamroller/lib/RollingFileWriteStream.js:225:8) 9 at new RollingFileWriteStream (/Users/bariko/appfile/node_modules/streamroller/lib/RollingFileWriteStream.js:74:10) 10 at new DateRollingFileStream (/Users/bariko/appfile/node_modules/streamroller/lib/DateRollingFileStream.js:23:5) 11 at appender (/Users/bariko/appfile/node_modules/log4js/lib/appenders/dateFile.js:25:19) 12 at Object.configure (/Users/bariko/appfile/node_modules/log4js/lib/appenders/dateFile.js:55:10) 13 at /Users/bariko/appfile/node_modules/log4js/lib/appenders/index.js:63:27 14 at Object.onlyOnMaster (/Users/bariko/appfile/node_modules/log4js/lib/clustering.js:85:50) 15 at createAppender (/Users/bariko/appfile/node_modules/log4js/lib/appenders/index.js:61:21) 16 at /Users/bariko/appfile/node_modules/log4js/lib/appenders/index.js:77:25 17 at Array.forEach (<anonymous>) 18 at setup (/Users/bariko/appfile/node_modules/log4js/lib/appenders/index.js:75:33) 19 at /Users/bariko/appfile/node_modules/log4js/lib/configuration.js:46:33 20 at Array.forEach (<anonymous>) 21 at Object.configure (/Users/bariko/appfile/node_modules/log4js/lib/configuration.js:46:13) { 22 errno: -13, 23 syscall: 'mkdir', 24 code: 'EACCES', 25 path: '/var/log/nodejs/system' 26}
そこで、カレントディレクトリが、このapp.jsの親ディレクトリ(appfile)にいる状態で
terminal
1$sudo chmod 777 /var/log/nodejs/system
をしたけど、もしかして/var/log/nodejs/systemってホーム直下にあるのかな、と思い、 ホームから
terminal
1$cd /var/log/nodejs 2$ls
をしたら、やはりsystemというディレクトリがありました。
そこで/var/log/nodejs/systemをカレントディレクトリにした状態で
terminal
1$sudo chmod 777 /var/log/nodejs/system
をした後に、また
terminal
1$cd /Users/bariko/appfile 2$ node app.js
をしたところ、エラーメッセージが若干変わりました。
terminal
1events.js:292 2 throw er; // Unhandled 'error' event 3 ^ 4 5Error: EACCES: permission denied, open '/var/log/nodejs/system/system.log' 6Emitted 'error' event on DateRollingFileStream instance at: 7 at WriteStream.<anonymous> (/Users/bariko/appfile/node_modules/streamroller/lib/RollingFileWriteStream.js:237:12) 8 at WriteStream.emit (events.js:315:20) 9 at /Users/bariko/appfile/node_modules/graceful-fs/graceful-fs.js:295:14 10 at /Users/bariko/appfile/node_modules/graceful-fs/graceful-fs.js:325:16 11 at FSReqCallback.oncomplete (fs.js:155:23) { 12 errno: -13, 13 code: 'EACCES', 14 syscall: 'open', 15 path: '/var/log/nodejs/system/system.log' 16} 17
今度は/var/log/nodejs/system/system.logのopenが権限がなくてできないよ、ということでしょうか…
さらに追記
「とりあえず ls -l /var/log/nodejs/system の結果を貼ってください。」ということでやってみました。
terminal
1Mac:system bariko$ ls -l 2total 8 3-rw-r--r-- 1 root wheel 174 6 20 18:55 system.log
さらにさらに追記
「$ sudo chmod 666 /var/log/nodejs/system/system.log すれば書き込めるようになって、動く」というアドバイス通りにやってみました。
terminal
1Mac:system bariko$ sudo chmod 666 /var/log/nodejs/system/system.log 2Password: 3Mac:system bariko$ cd /Users/bariko/appfile 4Mac:appfile bariko$ node app.js
ただ、また新しいエラーが出て、以下の通り今度はaccess.logというのが開けないよ、というので
terminal
1events.js:292 2 throw er; // Unhandled 'error' event 3 ^ 4 5Error: EACCES: permission denied, open '/var/log/nodejs/access/access.log' 6Emitted 'error' event on DateRollingFileStream instance at: 7 at WriteStream.<anonymous> (/Users/saya/technoproducerhomepage/node_modules/streamroller/lib/RollingFileWriteStream.js:237:12) 8 at WriteStream.emit (events.js:315:20) 9 at /Users/saya/technoproducerhomepage/node_modules/graceful-fs/graceful-fs.js:295:14 10 at /Users/saya/technoproducerhomepage/node_modules/graceful-fs/graceful-fs.js:325:16 11 at FSReqCallback.oncomplete (fs.js:155:23) { 12 errno: -13, 13 code: 'EACCES', 14 syscall: 'open', 15 path: '/var/log/nodejs/access/access.log' 16}
また権限をあげればいいのかな、と思い、$ls -lしてみました。
terminal
1Mac:appfile bariko$ cd /var/log/nodejs/access 2Mac:access bariko$ ls -l 3total 0 4-rw-r--r-- 1 root wheel 0 6 20 18:55 access.log
すると、前のsystem.logの時と同じ権限のようなので$ sudo chmod 666 /var/log/nodejs/access/access.logしてみました。
terminal
1Mac:access bariko$ sudo chmod 666 /var/log/nodejs/access/access.log
またnode app.jsしてみました
そして、ちゃんとcd /Users/bariko/appfileに移動してからnode app.jsしてみました。
terminal
1Mac:access bariko$ cd /Users/bariko/appfile 2Mac:access bariko$ node app.js 3(node:37669) UnhandledPromiseRejectionWarning: Error: querySrv ENOTFOUND _mongodb._tcp.undefined.mongodb.net 4 at QueryReqWrap.onresolve [as oncomplete] (dns.js:203:19) 5(node:37669) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1) 6(node:37669) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
mongoDBないんですけど、となってしまいました。