2014-01-06 2 views
0

Nodejs 스트림을 사용하여 S3에서 파일을 다운로드하고 쓰기 가능한 스트림으로 로컬 폴더로 직접 파이프합니다. 로컬 파일이 저장되면 로컬 파일을 여러 버전으로 다시 크기 조정하고 S3에 다시 업로드하기 위해 몇 가지 추가 처리를 수행합니다.오류 : 임의로 나타나는 ENONT 생성 (스트림 관련)

아래 코드는 S3에서 파일을 제대로 다운로드하고 로컬 폴더에 저장합니다. 나는 이것이 효과가 있음을 확인했다.

var readable = request(path) 
     , writable = fs.createWriteStream('files/images/' + fileName); 
    var localPath = 'files/images/' + fileName; 

winston.log('info', "About to start download: " + asset.fileType); 
readable.pipe(writable) 
    //once the file is saved, start processing it 
    .on('error', function(error){ 
     winston.log('error', error); 
    }) 
    .on('finish', function() { 
     winston.log('info', "file downloaded"); 
     series(localPath, sizesKey.shift(), respond); 
     readable.end(); 
     writable.end(); 
    }).on('error', function(error){ 
     winston.log('error', error); 
    }); 

내 로컬 컴퓨터에서 스크립트를 실행하면 모든 것이 제대로 작동하고 나머지 스크립트는 문제없이 계속됩니다.

그러나 노드 v.10.10이있는 Amazon EC2 LINUX에서 실행하면 위의 코드가 실행 된 후에 아래 오류가 발생하지만 항상 동시에 실행되는 것은 아닙니다. 예를 들어 크기 조정 중에, 크기 조정이 성공적으로 완료된 후에 또는 위의 코드를 완료 한 후에 발생하는 S3 업로드 중에 오류가 표시 될 수 있습니다.

내 생각 엔 스트림을 제대로 닫지 않고 말하는 것이 내게 문을 닫는 것 같습니다. 그럼에도 불구하고 나는 지금 어둠 속에서 총을 쏜다. 오류가 어디에서 오는의 더 나은 아이디어를 얻을 수 있도록 별개의 객체로 스트림을 위반하여

events.js:72 
     throw er; // Unhandled 'error' event 
      ^
Error: spawn ENOENT 
    at errnoException (child_process.js:980:11) 
    at Process.ChildProcess._handle.onexit (child_process.js:771:34) 

답변

1

시작 : 여기

는 오류입니다. 아마도 series(...) 함수일까요?

또한 파일에 로그온하도록 winston을 구성했지만 파일을 사용할 수 없기 때문에 오류가 발생할 수 있습니다. 즉,이 문제에 대한 해결책은 GraphicsMagick가 제대로 설치되지되지 않았 음을 밝혀졌다

var readable = request(path), 
    writable = fs.createWriteStream('files/images/' + fileName); 
var localPath = 'files/images/' + fileName; 

// winston.log('info', "About to start download: " + asset.fileType); 
console.log('about to start download: ' + asset.fileType) 

readable.on('error', function(error) { 
    console.error('error from readable stream') 
    console.dir(err) 
}) 

writable.on('error', function(error) { 
    console.error('error from writable stream') 
    console.dir(err) 
}) 

writabale.on('finish', function() { 
    // winston.log('info', "file downloaded"); 
    console.log('file downloaded') 
    // I'm not sure what this series function does 
    // series(localPath, sizesKey.shift(), respond); 

    // these end methods have already been called after the "finish" event fires 
    // readable.end(); 
    // writable.end(); 
}) 

// it is best practice to setup all your event handlers before piping streams together, so the pipe call is moved to the bottom here 
readable.pipe(writable) 
0

문제를 해결되는지 확인 console.log와 윈스턴 제거 및 교체 시도하고 나중에 아래 스크립트에서 해당 패키지의 메서드를 호출 할 때 , 추락했습니다. 그 명령이 불려지는 시점에 오류가 나타나지 않은 이유는 또 다른 걱정거리입니다.