【问题标题】:Error: spawn ENONT appearing randomly (streams related)错误:随机出现的生成 ENONT(流相关)
【发布时间】:2014-01-24 11:57:16
【问题描述】:

我正在使用 Nodejs 流从 S3 下载文件并作为可写流直接通过管道传输到本地文件夹。保存本地文件后,我会进行一些额外的处理以将本地文件重新调整为多个版本并重新上传到 S3。

下面的代码正确地从 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);
    });

当我在本地机器上运行我的脚本时,一切正常,我的脚本的其余部分继续运行,没有任何问题。

但是,当从带有 Node 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)

【问题讨论】:

    标签: node.js amazon-s3 stream pipe


    【解决方案1】:

    首先将流分解为不同的对象,以便您更好地了解错误的来源。也许是series(...) 函数?

    此外,如果您将 winston 配置为记录到文件,但该文件不可用,则可能会出现错误。尝试删除winston并替换为console.log,看看是否能解决问题

    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)
    

    【讨论】:

      【解决方案2】:

      这个问题的解决方案原来是 GraphicsMagick 没有正确安装,当我稍后在脚本中调用该包中的方法时,它崩溃了。为什么在调用这些命令时没有出现错误是另一个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-29
        • 2015-03-08
        • 1970-01-01
        • 2018-07-10
        • 2013-11-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多