Graphicsmagick没有使用nodejs和S3在Elastic Beanstalk中工作

时间:2015-04-10 22:06:34

标签: node.js stream imagemagick elastic-beanstalk graphicsmagick

我使用nodejs和graphicsmagick处理带有文本的图像,然后将最终的jpg流式传输到S3。

使用postman,我能够在我的localhost上测试这个流程,一切正常。但是,我现在遇到了问题,我把它移到了Elastic Beanstalk。当我发布到端点时,它会将空白文件上传到S3,并且EB中没有记录错误。我认为它与软件有关,但有点卡住了。任何建议赞赏!谢谢!

顶级文件来自localhost,底层文件来自Elastic Beanstalk: http://cl.ly/image/0O231k171N0W

var gm              = require('gm');
var appRoot         = require('app-root-path').path;

function createImage(caption, res) {
    var originalImage   = '/images/2015-02-24.jpg';
    var textColor       = 'white';

    gm(appRoot + originalImage)
        .fill(textColor)
        .font( appRoot + '/fonts/BentonSans-Book.otf')
        .drawText(0, 0, caption, 'Center')
        .stream(function(err, stdout, stderr) {
            sendToS3(err, stdout, stderr, originalImage, res);
        });
}

function sendToS3(err, stdout, stderr, originalImage, client_response) {
    var imageName       = shortId.generate();
    var buff            = new Buffer('');

    stdout.on('data', function(data) {
        buff = Buffer.concat([buff, data]);
    });

    stdout.on('end', function(data) {
        var data = {
            Bucket: S3_bucket,
            Key: imageName + '.jpg',
            Body: buff,
            ContentType: mime.lookup(originalImage)
        };

        s3.putObject(data, function(err, res) {
            client_response.send('done');
        });
    });
}

=============================================== ================

修改 而不是流式传输到S3,我改变它直接写入文件系统。 AWS EB日志中引发的错误是:

err { [Error: Command failed: gm convert: Request did not return an 
image.] code: 1, signal: null }

我相信我错过了ImageMagick的一些依赖项。有什么想法吗?

这是在我的本地终端中运行 convert --version

Version: ImageMagick 6.8.9-7 Q16 x86_64 2014-08-31
http://www.imagemagick.org
Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC
Features: DPC Modules
Delegates: bzlib freetype jng jpeg ltdl lzma png xml zlib

这是在我的EC2实例中运行 convert --version (代理部分为空):

Version: ImageMagick 6.9.1-1 Q16 x86_64 2015-04-10
http://www.imagemagick.org
Copyright: Copyright (C) 1999-2015 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: DPC OpenMP
Delegates (built-in): 

2 个答案:

答案 0 :(得分:5)

如何在ElasticBeanstalk中的EC2实例上安装GraphicsMagick?您使用的是自定义AMI吗?默认的AMI(至少是我使用的AMI)没有GraphicsMagick,但我不了解ImageMagick。

您可以使用容器命令来安装yum包。我在一个需要GraphicsMagick的项目中使用了下面的那个。

在项目的根目录下创建一个名为" .ebextensions的文件夹。"在该文件夹的内部,创建一个名为" package.config"的文件。具有以下内容:

commands:
  01-command:
    command: yum install -y --enablerepo=epel GraphicsMagick

这将在创建实例时安装它。我觉得这应该解决你的问题,如果不是你可能想使用命令行选项yum使用相同的版本或安装代表:

commands:
  01-command:
    command: yum install -y --enablerepo=epel GraphicsMagick
  02-command:
    command: yum install -y --enablerepo=epel GraphicsMagick-devel

答案 1 :(得分:1)

我将我的elasticbeanstalks的nodejs版本从节点12降低到了节点8.15.0,百胜可以找到Graphicsmagick并成功安装它。 (我在.ebextensions / packages.config中列出了Graphicsmagick) 希望这会对某人有所帮助!