我使用nodejs和graphicsmagick处理带有文本的图像,然后将最终的jpg流式传输到S3。
使用poster,我能够在本地主机上测试这个流,一切都很好。然而,我现在遇到了一些问题,我把它移到了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');
});
});
}
=================================================
EDIT:我没有流式传输到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(Delegates部分为空):
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):
如何在ElasticBeanstalk中的EC2实例上安装GraphicsMagick?您正在使用自定义AMI吗?默认的AMI(至少我使用过的AMI)没有GraphicsMagick,不过我不知道ImageMagick。
您可以使用container命令来安装带有百胜的软件包。我在一个需要GraphicsMagick的项目中使用了下面的一个。
在项目根目录下创建一个名为".eextensions"的文件夹。在该文件夹内,创建一个名称为"package.config"的文件,其中包含以下内容:
commands:
01-command:
command: yum install -y --enablerepo=epel GraphicsMagick
这将在创建实例时安装它。我觉得这应该能解决你的问题,如果不能,你可能想使用命令行选项让百胜使用相同的版本,或者也安装委托:
commands:
01-command:
command: yum install -y --enablerepo=epel GraphicsMagick
02-command:
command: yum install -y --enablerepo=epel GraphicsMagick-devel
我将我的elasticbeanstars的nodejs版本从node12降低到node8.15.0,然后百胜可以找到Graphicsmagick并成功安装它。(我在.eextensions/packages.config中列出了Graphicsmagick)希望这能帮助到别人!