Blog.おにぎりたまごうぃんなー

Suzuki Yuki@s12bt おべんと箱みたいに色々つめこみたい。仕事とかデザインとか料理とか好きなもののことを書きます。

styledoccoで"Error: spawn EMFILE"

styledoccoコマンド打ったら、エラーが出て前に進めなかった。
大量のファイルがあると起こる問題だったっぽい。困ったのでメモ。

エラーメッセージ

$ styledocco -n "styleduide" stylesheets/

child_process.js:927
    throw errnoException(process._errno, 'spawn');
          ^
Error: spawn EMFILE
    at errnoException (child_process.js:980:11)
    at ChildProcess.spawn (child_process.js:927:11)
    at exports.spawn (child_process.js:715:9)
    at preprocess (/usr/local/lib/node_modules/styledocco/cli.js:136:10)
    at Object.css (/usr/local/lib/node_modules/styledocco/node_modules/async/lib/async.js:532:23)
    at /usr/local/lib/node_modules/styledocco/node_modules/async/lib/async.js:467:25
    at /usr/local/lib/node_modules/styledocco/node_modules/async/lib/async.js:86:13
    at Array.forEach (native)
    at _forEach (/usr/local/lib/node_modules/styledocco/node_modules/async/lib/async.js:26:24)
    at Object.async.forEach (/usr/local/lib/node_modules/styledocco/node_modules/async/lib/async.js:85:9)

Error: spawn EMFILE

一度に開けるファイルの上限数にひっかかっているっているエラーでした。
ulimit -aで、一度に開けるファイル数の上限がいくつに設定されているかを確認する。

$ ulimit -a
-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-v: address space (kbytes)          unlimited
-l: locked-in-memory size (kbytes)  unlimited
-u: processes                       709
-n: file descriptors                256

nの項目がファイル数の上限値。この場合は256に設定されている。
Mac OS 10.9.1(Mavericks)での初期値は256のよう。
ulimit -n 1000で1000まで広げてあげる。-nで設定してもメッセージが何も返ってこないので、-aで再度確認する。

$ ulimit -n 1000
$ ulimit -a
-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-v: address space (kbytes)          unlimited
-l: locked-in-memory size (kbytes)  unlimited
-u: processes                       709
-n: file descriptors                1000


ここで$ styledocco -n "styleduide" stylesheets/を実行すると"docs"ディレクトリが作成されて、ドキュメントが生成される。

メモその2 $ styledocco -n "hogehoge"でつけられるのはディレクトリ名ではない

$ styledocco -n [プロジェクト名] [ターゲットディレクトリ]
$ styledocco -n "mogemoge" styleseets

って実行したら、mogemogeってディレクトリが作成されるのかと思ってたけど勘違いだった。
作成されるディレクトリはdocs、プロジェクト名はドキュメントのhtmlのヘッダーに書かれる。
f:id:s12bt:20131225174424p:plain