문제상황 : 잘 되던 hexo server
가 갑자기 draft폴더의 여러 글들을 수정하던 중 렌더링이 안 됨.
세부 내용
draft의 글과 about의 글 들을 동시다발적으로 수정하던 도중 갑자기 hexo server가 돌아가지 않는 에러 발생
며칠 동안 해결이 안 됨
에러 해결 과정 intro
- 처음 에러 메세지가 길었는데 그 중 critical해 보였던 것은 빨갛게 떴던
expected variable end
에러.1
2
3
4
5
6
7
8
9
10
11
12
13Unhandled rejection Template render error: (unknown path) [Line 13, Column 38]
expected variable end
at Object._prettifyError (C:\Users\Hayeon\dev\gitblog-source\node_modules\nunjucks\src\lib.js:36:11)
at Template.render (C:\Users\Hayeon\dev\gitblog-source\node_modules\nunjucks\src\environment.js:526:21)
at Environment.renderString (C:\Users\Hayeon\dev\gitblog-source\node_modules\nunjucks\src\environment.js:364:17)
at Promise.fromCallback.cb (C:\Users\Hayeon\dev\gitblog-source\node_modules\hexo\lib\extend\tag.js:62:48)
at tryCatcher (C:\Users\Hayeon\dev\gitblog-source\node_modules\bluebird\js\release\util.js:16:23)
at Function.Promise.fromNode.Promise.fromCallback (C:\Users\Hayeon\dev\gitblog-source\node_modules\bluebird\js\release\promise.js:180:30)
at Tag.render (C:\Users\Hayeon\dev\gitblog-source\node_modules\hexo\lib\extend\tag.js:62:18)
at Object.onRenderEnd (C:\Users\Hayeon\dev\gitblog-source\node_modules\hexo\lib\hexo\post.js:282:20)
at Promise.then.then.result (C:\Users\Hayeon\dev\gitblog-source\node_modules\hexo\lib\hexo\render.js:65:19)
at tryCatcher
...
가설 1 : draft와 about의 글을 수정하다가 발생한 에러여서 하필 동시에 수정하니 글에 문제가 있을 것이다.
- _drafts 와 _posts를 다 날리고 테스트 해보니 에러가 바뀜
1
2
3
4
5
6
7
8
9
10
11Template render error: (unknown path) [Line 8, Column 23]
Error: Unable to call `the return value of (posts["first"])["updated"]["toISOString"]`, which is undefined or falsey
at Object._prettifyError (C:\Users\Hayeon\dev\gitblog-source\node_modules\nunjucks\src\lib.js:36:11)
at C:\Users\Hayeon\dev\gitblog-source\node_modules\nunjucks\src\environment.js:551:19
at Template.root [as rootRenderFunc] (eval at _compile (C:\Users\Hayeon\dev\gitblog-source\node_modules\nunjucks\src\environment.js:621:18), <anonymous>:214:3)
at Template.render (C:\Users\Hayeon\dev\gitblog-source\node_modules\nunjucks\src\environment.js:540:10)
at Hexo.module.exports (C:\Users\Hayeon\dev\gitblog-source\node_modules\hexo-generator-feed\lib\generator.js:40:22)
at Hexo.tryCatcher (C:\Users\Hayeon\dev\gitblog-source\node_modules\bluebird\js\release\util.js:16:23)
at Hexo.<anonymous> (C:\Users\Hayeon\dev\gitblog-source\node_modules\bluebird\js\release\method.js:15:34)
at Promise.map.key (C:\Users\Hayeon\dev\gitblog-source\node_modules\hexo\lib\hexo\index.js:344:26)
...
가설 2 : 필요 없는 플러그인
hexo-generator-feed
깃헙에 가보니 이것을 돌리기 위한 설정이 누락- 그런데 원래 이 설정 없이도 됐었다!
- 이 테마를 돌리기 위해 이 플러그인이 필요 없는 것 같음.
- 그냥 지웠더니 잘 돌아감
- 그런데 간헐적으로 webpack 에러 발생
1 | Error: Cannot find module 'C:\Users\Hayeon\dev\gitblog-source\webpack.config.js' |
- 그래서
hexo-renderer-webpack-2
이것도 지움 - 그랬더니 잘 돌아감!
- 다시 drafts, posts글들 복원하고 돌렸더니 원래뜨던 env에러 다시 뜸 (주륵..)
가설 3 : 수식 작성 문제
- 드래프트 다시 다 날리고 글 하나씩 복원하다 보니 한 포스팅이 걸림 (posts도 아니고 drafts였는데)
- 뭐가 에러인지 찾아보다 보니 특이한 점이 그 글은 수식을 많이 포함한 글이었다.
- 수식을 날려보니 돌아간다! - 수식에러로 판명
- 수식 하나씩 지우고 테스트 해보니 중괄호 두 개를 겹쳐쓰는 부분에서
\{\{
이렇게 붙어있으면 에러.\{ \{
로 띄어쓰기를 넣고 바꿔주니 잘 돌아갔다. (부들부들)
수식 에러 이전의 삭제한 디펜던시들은 무엇일까?
- 이전에 디버깅하며
npm install
을 했었다 - 기존 노트북에서 소스 옮겨오는 과정에서 문제가 생긴 것 같다 (또..)
- 저 두 generator는 예전 테마에서 쓰던 것들이어서 package.json에는 남아있었는데.. 예전에 여차저차 지우고 잘 돌았었던 듯.
- 그런데 이번에
npm install
하면서 다시 되살아났고, 관련 설정이 누락되어 에러 발생한 것으로 추측.
결론
- 수식 쓸 때 백슬래시 들어간 건 왠만하면 띄어쓰기 잘 지키자. (latex에선 잘 돌았는데 markdown 렌더러가 미세하게 차이가 있는 듯)
- 디펜던시 관리를 잘 하자.
- draft/posts 수정할 때 에러 메세지 잘 보면서, 글 한번에 하나씩만 작성하자.