vulcan9 / jikji.editor

jik-ji 프로젝트 관리
Other
0 stars 0 forks source link

좌측 트리 썸네일 메뉴가 빈 이미지로 나타남 #116

Closed vulcan9 closed 6 years ago

vulcan9 commented 6 years ago

0.4.5 버전에서 편집 작업 중 좌측 트리 (썸네일 보기)의 이미지가 갱신되지 않습니다. 썸네일 캡쳐작업을 건너뛰고 있는듯한 느낌입니다.

vulcan9 commented 6 years ago

한글경로에서 실행중일때 문제 현상이 재현됩니다. 원인 파악 결과 Node 에서 child_process.fork 메서드에서 한글 경로를 실행하지 않는것 같습니다. Node 버그라고 생각됩니다.

vulcan9 commented 6 years ago

NodeJS 이슈에 일단 올렸습니다. 응답이 올동안 다른 이슈를 먼저 처리합니다. 오랫동안 응답이 없을 경우 별도의 실행파일을 만들어 spwan 메서드로 처리할 계획입니다.

vulcan9 commented 6 years ago

nodeJS (#19888) 이슈에 답변을 보니 nodeJS 쪽 버그는 아닌듯 합니다. NwJS 이슈 게시판에서 검색해보니 fork 옵션으로 실행하는 방법이 있는데 이방법으로 해결할 수 있을것 같습니다.

var fork = require("child_process").fork;
var worker = fork("worker.js", {execPath:'node.exe'});

핵심은 execPath 옵션에 node.exe 값을 전달하는 것인데 아마도 node가 설치되어져 있어야만 동작할것 같은데 테스트 해보아야 할 것 같습니다.

vulcan9 commented 6 years ago

역시 이 방법은 로컬에 node.exe가 설치되어져 있을때만 가능한 방법으로 사용하기에 적절하지 않네요

vulcan9 commented 6 years ago

다음 방법으로 동작하는걸 확인했습니다.

var fork = require("child_process").fork;
var worker = fork("worker.js", {execPath:'nw/nw.exe'});

execPath 값으로 nw.exe 위치를 넘겨주니 동작합니다.

결국 spwan +socket 통신으로 구현하는 방법과 원리는 같으므로 fork메서드로 퍼포먼스 이점은 거의 없을것 같고, 단지 구현이 간단해 지는 이점이 있다고 생각해야 할것 같습니다.

vulcan9 commented 6 years ago

위 방법도 jik-ji 에서는 동작하지 않습니다. (정확히는 zip으로 패키징된 버전에서는 동작하지 않습니다.)

이유는 아마도 jik-ji 실행시 nw.exe 실행 파일의 위치와 process의 기본위치(cwd)가 다르기 때문인것 같습니다. (jik-ji 는 런타임에 cwd를 바꿉니다.)

execPath를 런타임에 현재 cwd와의 상대경로 설정하면 (예 : ../bin/nw/nw.exe) 문제 없이 돌아가긴 하지만 패키징 후에는 bin 폴더의 위치가 root 드라이브 자체가 달라지기 때문에(임시폴더에 압축을 풀게됨) 상대 경로로 설정할 수 없어 문제는 여전히 발생하게 됩니다.

// unzip package 인 경우에는 사용 가능함
var relativeExecPath = path.relative(process.cwd(), process.execPath);
var worker = fork("worker.js", {execPath: relativeExecPath});

한글 경로를 생략하기 위해 환경변수에 등록해서 호출하는 방법도 효과가 없었습니다.

var obj = path.parse(process.execPath);
process.env['Path'] = obj.dir + ';' + process.env['Path'];
var worker = fork("worker.js", {
    env: Object.create(process.env), 
    execPath: obj.base
});

마지막으로 child process의 cwd를 직접 지정해 주었습니다.

var obj = path.parse(process.execPath);
var worker = fork("worker.js", {
    cwd: obj.dir,
    execPath: obj.base
});

패키징 후에도 아직까지 문제는 발생되지 않고 있습니다. ^^

vulcan9 commented 6 years ago

0.4.11 버전(이상)에서 처리(구현) 되었습니다.