Nodemon: ์˜ค๋ฅ˜ "์˜ค๋ฅ˜: ENOSPC ๋ณด๊ธฐ"

์— ๋งŒ๋“  2013๋…„ 10์›” 20์ผ  ยท  56์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: remy/nodemon

20 Oct 16:40:37 - [nodemon] v0.7.10
20 Oct 16:40:37 - [nodemon] to restart at any time, enter `rs`
20 Oct 16:40:37 - [nodemon] watching: /my/proyect/server
20 Oct 16:40:37 - [nodemon] exception in nodemon killing node
Error: watch ENOSPC
    at errnoException (fs.js:1019:11)
    at FSWatcher.start (fs.js:1051:11)
    at Object.fs.watch (fs.js:1076:11)
    at Object.watchFileChecker.check (/usr/lib/node_modules/nodemon/nodemon.js:160:6)
    at ready (/usr/lib/node_modules/nodemon/nodemon.js:49:22)
    at /usr/lib/node_modules/nodemon/nodemon.js:63:11
    at ChildProcess.exithandler (child_process.js:641:7)
    at ChildProcess.EventEmitter.emit (events.js:98:17)
    at maybeClose (child_process.js:735:16)
    at Socket.<anonymous> (child_process.js:948:11)
20 Oct 16:40:37 - [nodemon] reading ignore list
20 Oct 16:40:37 - [nodemon] exception in nodemon killing node
Error: watch ENOSPC
    at errnoException (fs.js:1019:11)
    at FSWatcher.start (fs.js:1051:11)
    at fs.watch (fs.js:1076:11)
    at checkTimer (/usr/lib/node_modules/nodemon/nodemon.js:467:27)
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์‹œ์Šคํ…œ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ ์ˆ˜์— ์ œํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Dropbox์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ•จ๊ป˜ Grunt๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ์‹œ๊ณ„๊ฐ€ ๋งค์šฐ ๋นจ๋ฆฌ ์†Œ์ง„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒŒ์‹œ๋ฌผ์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์‹œ๊ณ„์˜ ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๊ธฐ ์œ„ํ•ด ์ด๊ฒƒ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

๋ชจ๋“  56 ๋Œ“๊ธ€

๋…ธ๋“œ ๋ฒ„์ „?

๋˜ํ•œ ์‚ฌ์šฉ ์ค‘์ธ(ํ…Œ์ŠคํŠธ์šฉ) ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋…ธ๋“œ 0.10.21์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์Šคํฌ๋ฆฝํŠธ์—์„œ ์˜ค๋ฅ˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

#144์™€ ๊ฐ™์€ ๋ฌธ์ œ์ธ๊ฐ€์š”? ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋‚ด Mac์—์„œ ๋ณต์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋™์ผํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ผ ํ”„๋กœ์„ธ์„œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ํด๋ผ์šฐ๋“œ๊ฐ€ ์•„๋‹Œ ๋‹ค์ค‘ ํ”„๋กœ์„ธ์„œ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์˜ค๋Š˜ ์—ฌ๋Ÿฌ ์•ฑ(express, restify)์—์„œ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋…ธ๋“œJS: v0.10.21
ElementaryOS ๋ฒ„์ „: 0.2 "Luna"( 64๋น„ํŠธ)
๊ธฐ๋ฐ˜: Ubuntu 12.04( "์ •ํ™•ํ•œ")
์ปค๋„ 3.5.0-43-์ผ๋ฐ˜

11 Nov 17:32:38 - [nodemon] v0.7.10
11 Nov 17:32:38 - [nodemon] to restart at any time, enter `rs`
...
11 Nov 17:32:38 - [nodemon] exception in nodemon killing node
Error: watch ENOSPC
    at errnoException (fs.js:1019:11)
    at FSWatcher.start (fs.js:1051:11)
    at Object.fs.watch (fs.js:1076:11)
    at Object.watchFileChecker.check (/home/.../node_modules/nodemon/nodemon.js:160:6)
    at ready (/home/.../node_modules/nodemon/nodemon.js:49:22)
    at /home/.../node_modules/nodemon/nodemon.js:63:11
    at ChildProcess.exithandler (child_process.js:641:7)
    at ChildProcess.EventEmitter.emit (events.js:98:17)
    at maybeClose (child_process.js:735:16)
    at Socket.<anonymous> (child_process.js:948:11)

๋‚ณ๋‹ค:

npm install nodemon
./node_modules/.bin/nodemon app.js

app.js(http://nodejs.org/์—์„œ)

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

CoffeeScript์™€ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค --watch ./node_modules/.bin/coffee --watch app/

/home/.../node_modules/coffee-script/lib/coffee-script/command.js:334
        throw e;
              ^
Error: watch ENOSPC
    at errnoException (fs.js:1019:11)
    at FSWatcher.start (fs.js:1051:11)
    at Object.fs.watch (fs.js:1076:11)
    at watchDir (/home/.../node_modules/coffee-script/lib/coffee-script/command.js:299:27)
    at /home/.../node_modules/coffee-script/lib/coffee-script/command.js:102:11
    at Object.oncomplete (fs.js:107:15)

๋…ธ๋“œ 0.10.21์ด ์žˆ๋Š” Ubuntu 13.10์—์„œ coffeescript๋ฅผ ์‚ฌ์šฉํ•˜๋Š” compound.js ํ”„๋กœ์ ํŠธ์—์„œ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

$ nodemon server.coffee

27 Nov 21:40:14 - [nodemon] v0.7.10
27 Nov 21:40:14 - [nodemon] to restart at any time, enter `rs`
27 Nov 21:40:14 - [nodemon] watching: /home/chok/work/edf/bluetic/src
27 Nov 21:40:14 - [nodemon] exception in nodemon killing node
Error: watch ENOSPC
    at errnoException (fs.js:1019:11)
    at FSWatcher.start (fs.js:1051:11)
    at Object.fs.watch (fs.js:1076:11)
    at Object.watchFileChecker.check (/usr/local/lib/node_modules/nodemon/nodemon.js:160:6)
    at ready (/usr/local/lib/node_modules/nodemon/nodemon.js:49:22)
    at /usr/local/lib/node_modules/nodemon/nodemon.js:63:11
    at ChildProcess.exithandler (child_process.js:641:7)
    at ChildProcess.EventEmitter.emit (events.js:98:17)
    at maybeClose (child_process.js:735:16)
    at Socket.<anonymous> (child_process.js:948:11)

๋ˆ„๊ตฐ๊ฐ€ nodemon์˜ dev ๋ฒ„์ „์œผ๋กœ ์ด๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ €๋Š” ๋งŽ์€ ๋ถ€๋ถ„์„ ๋ณ€๊ฒฝํ–ˆ์œผ๋ฉฐ ์ƒˆ ๋ฒ„์ „์—์„œ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

npm install -g nodemon@dev ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ์€ ์ด์œ ๋ฅผ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ์ตœ์‹  ์•ˆ์ •์ ์ธ nodemon npm ๋ฒ„์ „ ์‚ฌ์šฉ. ๋˜ํ•œ coffeescript --watch์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ์ด๊ฒƒ์€ ์ง€๊ธˆ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋“œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์—†๊ณ  npm ์„ค์น˜ ๋ชจ๋“ˆ๊ณผ ๋ฐฐํฌํŒ ์—…๋ฐ์ดํŠธ๋งŒ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์ง€๋งŒ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค.

$ nodemon server.coffee 
3 Dec 15:32:42 - [nodemon] v0.9.10
[nodemon] exception in nodemon killing node
[nodemon] Error: watch ENOSPC
    at errnoException (fs.js:1019:11)
    at FSWatcher.start (fs.js:1051:11)
    at Object.fs.watch (fs.js:1076:11)
    at Function.check (/usr/local/lib/node_modules/nodemon/lib/config/watchable.js:34:6)
    at alternativeCheck (/usr/local/lib/node_modules/nodemon/lib/config/checkWatchSupport.js:18:15)
    at /usr/local/lib/node_modules/nodemon/lib/config/checkWatchSupport.js:36:11
    at ChildProcess.exithandler (child_process.js:641:7)
    at ChildProcess.EventEmitter.emit (events.js:98:17)
    at maybeClose (child_process.js:735:16)
    at Socket.<anonymous> (child_process.js:948:11)

@chok nodemon ์„ ์‹คํ–‰ ์ค‘์ธ ๋™์ผํ•œ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ถ™์—ฌ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

find . | wc

์‹ค์ œ๋กœ ์ด ๋ฌธ์ œ์˜ ์›์ธ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

$ find . | wc
   7677    7677  542965

์ข‹์•„์š”, ๊ทธ๊ฒƒ์€ 7600๊ฐœ์˜ ํŒŒ์ผ๋กœ ์‹œ๊ณ„๋„ ๋ฐ”์ธ๋”ฉํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

tree ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ http://pastie.org/์— ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ(๋ฐฉ๋Œ€ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—).

Pasteie๋Š” ๊ทธ๊ฒƒ์ด ๋„ˆ๋ฌด ์ปค์„œ(64kb ์ด์ƒ) ๊ฒฐ๊ตญ ํ•˜๋‹จ์— ์žˆ๋Š” ํ…์ŠคํŠธ๊ฐ€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค :p(๋ชจ๋“  ๋ถ™์—ฌ๋„ฃ๊ธฐ๋Š” ์šฐ๋ฆฌ ์†Œ์œ ์ž…๋‹ˆ๋‹ค. ). ๋‚ด ํ”„๋กœ์ ํŠธ์™€ ๊ด€๋ จ๋œ ์ผ๋ถ€ ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ๋Œ€๋ถ€๋ถ„์˜ ํŒŒ์ผ์€ ๋ฌผ๋ก  node_modules์— ์žˆ์Šต๋‹ˆ๋‹ค.

์š”์ง€์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค : https://gist.github.com/chok/7774318

์ข‹์•„์š”, ์ œ ์ƒ๊ฐ์— ์ด๊ฒƒ์€ ๋ชจ๋‹ˆํ„ฐ๋ง๋˜๋Š” ํŒŒ์ผ์˜ ์ˆ˜์™€ ์™„์ „ํžˆ ์—ฐ๊ฒฐ๋œ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(๊ฐ ๊ฐœ๋ณ„ ํŒŒ์ผ์— ๋ฐ”์ธ๋”ฉํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—). ๊ธฐ๋ณธ์ ์œผ๋กœ node_modules ๋ฐ .git ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ์ง€๋งŒ ๋ฌด์‹œ ๋ช…๋ น์œผ๋กœ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ(์•„์ง 0.9.x๋ฅผ ์‹คํ–‰ ์ค‘์ด๋ผ๊ณ  ๊ฐ€์ •):

nodemon -i node_modules

๋ฌผ๋ก  ์ด ์ž‘์—…์„ ๋งค๋ฒˆ ์ˆ˜ํ–‰ํ•  ํ•„์š”๋Š” ์—†์œผ๋ฉฐ ์ด๊ฒƒ์ด ๋ฌธ์ œ์ธ์ง€ ํ™•์ธํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค :(

$ nodemon -i node_modules/ server.coffee 
3 Dec 20:52:32 - [nodemon] v0.9.10
[nodemon] exception in nodemon killing node
[nodemon] Error: watch ENOSPC
    at errnoException (fs.js:1019:11)
    at FSWatcher.start (fs.js:1051:11)
    at Object.fs.watch (fs.js:1076:11)
    at Function.check (/usr/local/lib/node_modules/nodemon/lib/config/watchable.js:34:6)
    at alternativeCheck (/usr/local/lib/node_modules/nodemon/lib/config/checkWatchSupport.js:18:15)
    at /usr/local/lib/node_modules/nodemon/lib/config/checkWatchSupport.js:36:11
    at ChildProcess.exithandler (child_process.js:641:7)
    at ChildProcess.EventEmitter.emit (events.js:98:17)
    at maybeClose (child_process.js:735:16)
    at Socket.<anonymous> (child_process.js:948:11)

๋‚˜๋Š” ๋˜ํ•œ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค :

$ nodemon -w app/* server.coffee 
3 Dec 20:53:32 - [nodemon] v0.9.10
[nodemon] exception in nodemon killing node
[nodemon] Error: watch ENOSPC
    at errnoException (fs.js:1019:11)
    at FSWatcher.start (fs.js:1051:11)
    at Object.fs.watch (fs.js:1076:11)
    at Function.check (/usr/local/lib/node_modules/nodemon/lib/config/watchable.js:34:6)
    at alternativeCheck (/usr/local/lib/node_modules/nodemon/lib/config/checkWatchSupport.js:18:15)
    at /usr/local/lib/node_modules/nodemon/lib/config/checkWatchSupport.js:36:11
    at ChildProcess.exithandler (child_process.js:641:7)
    at ChildProcess.EventEmitter.emit (events.js:98:17)
    at maybeClose (child_process.js:735:16)
    at Socket.<anonymous> (child_process.js:948:11)

๋˜‘๊ฐ™์€ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ --dump ์ถ”๊ฐ€ํ•˜๊ณ  ์‘๋‹ต์„ ๋ณด๋‚ด์ฃผ์‹ญ์‹œ์˜ค(๋ฌด์‹œ ๋ฒ„์ „์„ ์ˆ˜ํ–‰ํ•  ๋•Œ).

๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†์Šต๋‹ˆ๋‹ค.

$ nodemon -i node_modules/ server.coffee  --dump
3 Dec 21:17:18 - [nodemon] v0.9.10
[nodemon] exception in nodemon killing node
[nodemon] Error: watch ENOSPC
    at errnoException (fs.js:1019:11)
    at FSWatcher.start (fs.js:1051:11)
    at Object.fs.watch (fs.js:1076:11)
    at Function.check (/usr/local/lib/node_modules/nodemon/lib/config/watchable.js:34:6)
    at alternativeCheck (/usr/local/lib/node_modules/nodemon/lib/config/checkWatchSupport.js:18:15)
    at /usr/local/lib/node_modules/nodemon/lib/config/checkWatchSupport.js:36:11
    at ChildProcess.exithandler (child_process.js:641:7)
    at ChildProcess.EventEmitter.emit (events.js:98:17)
    at maybeClose (child_process.js:735:16)
    at Socket.<anonymous> (child_process.js:948:11)

ํ , ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ ์•ž์— --dump ๋ฅผ ๋ถ™์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋Ÿฌ๋ฉด ๊ตฌ์„ฑ ๋คํ”„๊ฐ€ ์ œ๊ณต๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๋ฏธ ๋‘˜ ๋‹ค ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค :(

$ nodemon -i node_modules/ --dump server.coffee 
3 Dec 21:25:35 - [nodemon] v0.9.10
[nodemon] exception in nodemon killing node
[nodemon] Error: watch ENOSPC
    at errnoException (fs.js:1019:11)
    at FSWatcher.start (fs.js:1051:11)
    at Object.fs.watch (fs.js:1076:11)
    at Function.check (/usr/local/lib/node_modules/nodemon/lib/config/watchable.js:34:6)
    at alternativeCheck (/usr/local/lib/node_modules/nodemon/lib/config/checkWatchSupport.js:18:15)
    at /usr/local/lib/node_modules/nodemon/lib/config/checkWatchSupport.js:36:11
    at ChildProcess.exithandler (child_process.js:641:7)
    at ChildProcess.EventEmitter.emit (events.js:98:17)
    at maybeClose (child_process.js:735:16)
    at Socket.<anonymous> (child_process.js:948:11)

์•ˆ๋…•ํ•˜์„ธ์š”. ๋‘”ํƒํ•œ ์†Œ๋ฆฌ๋ฅผ ํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์ง€๋งŒ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹œ์Šคํ…œ์—์„œ max_user_watches ๋ฅผ ๋Š˜๋ ค ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹ค๋ฅธ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ด ์Šค๋ ˆ๋“œ๋ฅผ ๋ณด๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

@taylorjbrennan ๋„ค, ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์••๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ @chok ์ด ์ผ๊ด€๋˜๊ฒŒ ๋ณต์ œํ•  ์ˆ˜ ์žˆ๋Š” ๋™์•ˆ ์ €๋Š” ์‚ฌ์šฉ์ž๊ฐ€ max_user_watches io ๋งˆ๋ฒ•์„ ์ˆ˜ํ–‰ํ•  ํ•„์š” ์—†์ด nodemon์„ ์ˆ˜์ •ํ•˜๋Š” ๋ณ€๊ฒฝ์„ ์ถ”๊ตฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@remy ๊ต‰์žฅํ•ด , ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๊ณ ๋Œ€ํ•œ๋‹ค.

@chok [email protected]์œผ๋กœ ๋‹ค์‹œ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? - ์ด์ œ nodemon์€ ๊ธฐ๋ณธ์ ์œผ๋กœ .git ๋ฐ node_modules/**/node_modules๋ฅผ ๋ฌด์‹œํ•˜๋ฏ€๋กœ ์‹œ๊ณ„ ์ˆ˜๋Š” ํ›จ์”ฌ ๋‚ฎ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ด๊ฒƒ์ด ์—ฌ์ „ํžˆ ๋ฌธ์ œ์ธ ๊ฒฝ์šฐ ๋‹ค์‹œ ์—ด๊ฒ ์Šต๋‹ˆ๋‹ค) .

๋‚˜๋Š” ๋˜ํ•œ ๊ฐ์ง€ํ•˜๋ ค๊ณ ๊ฑฐ์•ผ watch ENOSPC ์˜ค๋ฅ˜ ๋ฐ ์ฆ๊ฐ€์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์—์ฝ” max_user_watches . ์ด์ƒ์ ์ด์ง€๋Š” ์•Š์ง€๋งŒ ๋‚ด๊ฐ€ ์‹ค์ œ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์€ ๋” ์ด์ƒ ์—†์Šต๋‹ˆ๋‹ค.

๋” ์ด์ƒ ์ด ๋ฉ”์‹œ์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค :) ํ•˜์ง€๋งŒ ์ด์ œ #245์— ๋ฌธ์ œ๊ฐ€ ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ์‹œ์Šคํ…œ์—์„œ ๋„ˆ๋ฌด ๋งŽ์€ ํŒŒ์ผ์ด ์—ด๋ ค์žˆ๋Š” ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. (Sublime Text๋Š” ํ—ˆ์šฉํ•˜๋ฉด ๋งŽ์€ ํŒŒ์ผ์„ ์—ฌ๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค)

Sublime 2 nodemon์—์„œ ๋งŽ์€ ํŒŒ์ผ์ด ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์—ด์ž ๋งˆ์ž ๋” ์ด์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š๊ณ  ์ฐธ์กฐ๋œ ์˜ค๋ฅ˜๋ฅผ ๋ฑ‰์–ด๋ƒ…๋‹ˆ๋‹ค. Sublimes์˜ "ํด๋” ์—ด๊ธฐ" ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ์œผ๋กœ์จ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. @eyce9000 ํžŒํŠธ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@timtips ๋Š” sublimetext3 ๋ฐ nodemon v1.3.1๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

@baio ๋‹ค์‹œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. [email protected] ์€ ์—†์Šต๋‹ˆ๋‹ค - ์‹œํ—˜ํŒ @1.3.0-1์ด ์žˆ์Šต๋‹ˆ๋‹ค - ํ•˜์ง€๋งŒ npm์—์„œ ์ƒ์‚ฐ ์ค‘์ด ์•„๋‹™๋‹ˆ๋‹ค(npm ๋ฒ„์ „๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ)?

๊ทธ๋Š” ์ด ๋ฒ„๊ทธ๋ฅผ ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? nodemon๊ณผ nodejs์˜ ์ƒˆ ๋ฒ„์ „์œผ๋กœ ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์ง€๋งŒ ์™„์ „ํžˆ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค๊ณ  ๋งํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ์ž์ฃผ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@alejonext npm install -g nodemon@dev ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ - 1.2.1์— ์—†๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” ์‹ค์ œ๋กœ "Error NO disk SPaCe"๋ฅผ ์˜๋ฏธํ•˜์ง€๋งŒ ๋ชจ๋‹ˆํ„ฐ๋ง ์ค‘์ธ ํŒŒ์ผ ์ˆ˜์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ์ˆ˜๋Š” ๊ฐ์‹œ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์ค„์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค...

@remy Works ์™„๋ฒฝํ•ฉ๋‹ˆ๋‹ค :)

๋‹ฌ์ฝคํ•œ. ์ด๋ฒˆ ์ฃผ์— ๋งŽ์€ ๋ฒ„๊ทธ ์ˆ˜์ •๊ณผ ํ•จ๊ป˜ 1.3.0์—์„œ npm์œผ๋กœ ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@remy ๋Š” ์‘๋‹ต ์‹œ๊ฐ„์— ๋†€๋ž์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

@๋ ˆ๋ฏธ
nodemon ํ‚ฌ๋ง ๋…ธ๋“œ์˜ ์˜ˆ์™ธ
์˜ค๋ฅ˜: ENOSPC ๋ณด๊ธฐ
errnoException์—์„œ (fs.js:1030:11)
FSWatcher.start์—์„œ (fs.js:1062:11)
Object.fs.watch์—์„œ (fs.js:1087:11)

๋…ธ๋“œ v0.10.33
OS: ๋ฆฌ๋ˆ…์Šค ์šฐ๋ถ„ํˆฌ

์ด ๋ช…๋ น์œผ๋กœ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/ember-cli/ember-cli/issues/1240#issuecomment -47855317

ํ•˜์ง€๋งŒ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํŒจํ‚ค์ง€๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

์• ์ดˆ์— ์™œ ์ด๋ ‡๊ฒŒ ๋œ๊ฑด์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋“œ ๋ฒ„์ „ ๊ด€๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋…ธ๋“œ 0.12.0
npm 2.7.0
์— ๋ฒ„ 0.2.0

@ahnbizcad
์•„๋งˆ๋„ ๋•Œ๋ฌธ์—
https://github.com/joyent/node/wiki/API-changes-between-v0.10-and-v0.12#resource-management ?

์‹œ์Šคํ…œ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ ์ˆ˜์— ์ œํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Dropbox์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ•จ๊ป˜ Grunt๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ์‹œ๊ณ„๊ฐ€ ๋งค์šฐ ๋นจ๋ฆฌ ์†Œ์ง„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒŒ์‹œ๋ฌผ์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์‹œ๊ณ„์˜ ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๊ธฐ ์œ„ํ•ด ์ด๊ฒƒ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

"nodemon": "^1.4.1" ๋ฐ "node": "0.12.7" ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค๋ง:

#625๋กœ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค

2015๋…„ 9์›” 8์ผ ํ™”์š”์ผ 16:20 Wesley Queiroz [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

"nodemon": "^1.4.1" ๋ฐ "node": "0.12.7" [์ด๋ฏธ์ง€:
:์‹ค๋งํ•œ:]

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/remy/nodemon/issues/214#issuecomment -138598438.

alpha ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ENOSPC ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ...
๋‚ด sysctl.conf ์—๋Š” fs.inotify.max_user_watches=10000 ์žˆ์Šต๋‹ˆ๋‹ค.
524288 ํ•˜๋ฉด ์ž‘๋™ํ•˜์ง€๋งŒ "dev-server"์—์„œ๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ช‡ ๊ฐœ์˜ ํŒŒ์ผ์„ ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๊นŒ? ์ฆ‰, ๋‹น์‹ ์˜ ๋ฐ‘์— ์–ผ๋งˆ๋‚˜ ๋งŽ์€
์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ?

2015๋…„ 9์›” 8์ผ ํ™”์š”์ผ 17:37 Wesley Queiroz [email protected]์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์•ŒํŒŒ๋กœ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ENOSPC๋ฅผ ์–ป๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ...
๋‚ด sysctl.conf์—๋Š” fs.inotify.max_user_watches=10000์ด ์žˆ์Šต๋‹ˆ๋‹ค.
524288๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ์ž‘๋™ํ•˜์ง€๋งŒ "dev-server"์—์„œ๋Š” ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/remy/nodemon/issues/214#issuecomment -138624285.

๋งŽ์ง€๋Š” ์•Š๊ณ  ์ตœ๋Œ€ 30๊ฐœ
ํ•˜์ง€๋งŒ nodemon์€ ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ์—์„œ node_modules ๋ฅผ ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
๋‹ค์Œ์€ nodemon์— ์ „๋‹ฌ๋œ ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค(์ €๋Š” ๋…ธ๋“œ ๋ชจ๋“ˆ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค).

nodemon({
    script: 'server/server.js',
    watch: [
        'server/',
        'common/'
    ],
    ext: 'js json coffee'
});

์„œ๋ฒ„ ํด๋”์—๋Š” ๋‹ค์Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
7 ์ปคํ”ผ ํŒŒ์ผ
5๊ฐœ์˜ json ํŒŒ์ผ
๊ทธ๋ฆฌ๊ณ  common ํด๋”์—๋Š” 1๊ฐœ์˜ json ํŒŒ์ผ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค...

์˜ˆ... find . | wc -l ์‹คํ–‰ํ•˜๋ฉด ๊ทธ ์ˆซ์ž๊ฐ€ ๋ฌด์—‡์„ ์ œ๊ณตํ•ฉ๋‹ˆ๊นŒ? ๊ธฐ๋ณธ์ ์œผ๋กœ node_modules ๋ฅผ ๋ฌด์‹œํ•ด์•ผ ํ•˜์ง€๋งŒ ๊ณ ๋ ค๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์—์„œ find . | wc -l ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด 18266 ๋˜์ง€๋งŒ node_modules ๋ฐ bower_components ํ•˜๋ฉด 320 ๋ฉ๋‹ˆ๋‹ค.

์ข‹์•„, ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์‹œ๊ณ„๊ฐ€ node_modules ํฌํ•จ _is_ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ #625 ๋ฆฌํŒฉํ„ฐ๋ง์˜ ์ผ๋ถ€์ด๋ฉฐ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@wesleycoder ๋Š” ์ตœ์‹  nodemon@dev (๋ฒ„์ „ 1.5.0-alpha4 ์ด์–ด์•ผ ํ•จ)๋กœ ์‹œ๋„ํ•˜๊ณ  DEBUG=nodemon <your normal nodemon command> ํ•œ ๋‹ค์Œ ์ „์ฒด ์ถœ๋ ฅ์„ ๋ถ™์—ฌ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์™€!
ํšจ๊ณผ๊ฐ€์žˆ๋‹ค!
์˜ค๋ฅ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค!
๊ฐ์‚ฌ ํ•ด์š”!

์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž๊ฐ€ ํŒŒ์ผ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ๊ธฐ ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ถ„ํˆฌ์—์„œ ๋‹ค์Œ ๋ช…๋ น์ค„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
๋˜๋Š” ์‹œ๋„
npm dedupe

์— ์‹ฌํŒ ์ด ์œ ๋ž˜

@ankibalyan @uttampanara

ํšจ๊ณผ๊ฐ€์žˆ๋‹ค !
์—์ฝ” fs.inotify.max_user_watches=524288 | sudo ํ‹ฐ -a /etc/sysctl.conf && sudo sysctl -p

๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!
์—์ฝ” fs.inotify.max_user_watches=524288 | sudo ํ‹ฐ -a /etc/sysctl.conf && sudo sysctl -p

์—ฌ๊ธฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€! :+1:
์—์ฝ” fs.inotify.max_user_watches=524288 | sudo ํ‹ฐ -a /etc/sysctl.conf && sudo sysctl -p

์ด ๋ช…๋ น์„ ์‹คํ–‰

echo fs.inotify.max_user_watches=582222 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

๋˜ ๋‹ค๋ฅธ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์€ ๋ฃจํŠธ ํด๋”์— nodemon.json ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ฌด์‹œ ํŒจํ„ด์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
nodemon.json

{
  "ignore": [
    "*.test.js", 
    "dist/*"
  ]
}
  • ๊ธฐ๋ณธ์ ์œผ๋กœ .git , node_modules , bower_components , .nyc_output , coverage ๋ฐ .sass-cache ๋Š” ๋ฌด์‹œ๋˜๋ฏ€๋กœ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๊ตฌ์„ฑ์— ์ถ”๊ฐ€ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

fs notify ํŠธ๋ฆญ์€ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค... ์ ์–ด๋„ Alpine 3.8์—์„œ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ENOSPC ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋„๊ตฌ๊ฐ€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  ์—ฌ์ „ํžˆ ๋ ˆ๊ฑฐ์‹œ ์ œํ’ˆ์„ ์œ ์ง€ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ค‘์š”ํ•ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰