当前位置: 首页 > 知识库问答 >
问题:

AWS弹性豆茎上带有枕头的“解码器jpeg不可用”

弘柏
2023-03-14

我在AWS弹性豆茎下处理Python上的jpeg文件时遇到了一些麻烦。

我在.eb扩展/蟒蛇.config文件上有这个:

packages:
 yum:
  libjpeg-turbo-devel: []
  libpng-devel: []
  freetype-devel: []
...

所以我相信我已经安装并运行了libjpeg(我试过libjpeg-devel,但是yum找不到这个包)。

另外,我requirements.txt:

Pillow==2.5.1
...

所以我相信我已经安装了枕头,并在我的环境中工作。

然后,因为我有枕头和libjpeg,所以我尝试使用PIL做一些工作。在Python脚本中映像并保存到文件。这样地:

from PIL import Image

def resize_image(image,new_size,crop=False,correctOrientationSize=False):
  assert type(new_size) == dict
  assert new_size.has_key('width') and new_size.has_key('height')

  THUM_SIZE = [new_size['width'],new_size['height']]

  file_like = cStringIO.StringIO(base64.decodestring(image))
  thumbnail = Image.open(file_like)

  (width,height) = thumbnail.size
  if correctOrientationSize and height > width:
    THUM_SIZE.reverse()

  thumbnail.thumbnail(THUM_SIZE)

  if crop:
    # Recorta imagem
    thumbnail = crop_image(thumbnail)
  output = cStringIO.StringIO()
  thumbnail.save(output,format='jpeg')

return output.getvalue().encode('base64')

但是,当我尝试在Elastic Beansta k的实例上运行它时,当它调用. sav()方法时出现异常“解码器jpeg不可用”。

如果我将SSH连接到我的实例中,它工作正常,并且我已经尝试重建环境。

我做错了什么?

更新:

按照建议,我再次进入实例并通过pip(/opt/python/run/venv/bin/pip)重新安装Pillow,而不是在我确定libjpeg-devel在Pillow之前就已经在环境中了。

我运行 selftest.py,它证实了我对jpeg的支持。因此,在最后一次尝试中,我转到了弹性豆茎界面上的“重新启动应用程序服务器”。成功了。

谢谢大家。

共有2个答案

王泓
2023-03-14

按照建议,我再次进入实例并通过pip(/opt/python/run/venv/bin/pip)重新安装Pillow,而不是在我确定libjpeg-devel在Pillow之前就已经在环境中了。

我运行了selftest.py,它确认我支持jpeg。所以,在最后一次尝试中,我转到弹性豆茎界面上的“重新启动应用服务器”。它起作用了。

松高歌
2023-03-14

根据这里的一般建议,我通过在我的. eb扩展配置中添加以下内容并重新部署来解决这个问题。

packages:
  yum:
    libjpeg-turbo-devel: []
    libpng-devel: []
    freetype-devel: []

container_commands:
...
  05_uninstall_pil:
    command: "source /opt/python/run/venv/bin/activate && yes | pip uninstall Pillow"

  06_reinstall_pil:
    command: "source /opt/python/run/venv/bin/activate && yes | pip install Pillow --no-cache-dir"
 类似资料:
  • 我正在弹性豆茎上开发一个Django后端系统。 当我上传JPEG图像文件时,我得到错误:解码器JPEG不可用。正在上载。png图像文件不会引起任何问题。 后端环境: AWS beanstalk:64位Amazon Linux 2014.03 v1.0.4运行Python 2.7 python:2.7 pip包列表Django==1.6.5降价==2.4.1 MySQL python==1.2.5枕

  • 配置验证异常:AWS Elastic Beanstatk无法与Amazon EC2通信以确定是否为Elastic Load均衡创建自定义安全组。 在创建AWS Elastic Beanstalk应用程序时,我在尝试继续“查看和启动”时遇到了这个错误。我是新手。请帮忙。

  • 我是AWS的新手,这个问题似乎很基本。然而,我需要看看我是否能找到解决方案。 我首先创建并启动了一个 EC2 实例,然后创建了一个弹性 Beanstalk 实例,并在该实例上部署了一个示例应用程序。默认情况下,弹性 Beanstalk 会将“默认环境”附加到此实例,我无法将其更改为我的 EC2 实例。如何将我的 EC2 实例(我之前创建的实例)附加到此弹性豆茎实例?我正在使用亚马逊免费套餐来学习。

  • 我可以用超文本传输协议浏览网站,但不能用https,我ChromeERR_CONNECTION_REFUSED。 我的环境是Nodejs(64bit AmazonLinux2015.09 v2.0)上的ExpresJS服务器,运行在Elastic Beanstalk上。我可以在端口80上telnet到EC2弹性公共IP,但在端口443上无法telnet,连接被拒绝。 设置 HTTPS 的步骤 >

  • 我使用WindowsPowerShell创建了一个弹性Beanstalk环境,并遵循以下部署文档将Django应用程序部署到弹性Beanstalk 我完成了以下步骤:使用Django的Python虚拟环境, 创建了django项目, 创建IAM用户我获得了访问密钥ID和机密访问密钥ID 失败此步骤环境并部署您的Django应用程序 当我尝试it询问访问密钥、秘密访问密钥和区域aws应用程序自动生成

  • 有人知道在弹性豆茎中传递一个秘密值作为环境变量是可能的吗?另一个选择显然是在我们的代码库中使用sdk,但我想先探讨环境变量方法 干杯Damien