"解码器jpeg不可用"与Django在Elastic beanstalk上

时间:2014-09-03 08:37:34

标签: django image jpeg elastic-beanstalk django-file-upload

我正在开发一个关于Elastic beanstalk的Django后端系统。

当我上传JPEG图像文件时,我收到错误decoder jpeg not available。上传.png图像文件不会导致任何问题。

后端环境:

  • AWS beanstalk:运行Python 2.7的64位Amazon Linux 2014.03 v1.0.4
  • python:2.7
  • pip包列表  Django的== 1.6.5  降价== 2.4.1  在MySQL-python的== 1.2.5  枕头== 2.5.3  博托== 2.30.0  Django的过滤器== 0.7  Django的储存== 1.1.8  djangorestframework == 2.3.14  ==的wsgiref 0.1.2

导致错误的源代码:

查看

normalImage = NormalImage(image=image, userProfile=request.user.profile, category = category)
normalImage.save()

型号

class NormalImage(models.Model):
    userProfile = models.ForeignKey(UserProfile)
    height = models.PositiveIntegerField(editable=False)
    width = models.PositiveIntegerField(editable=False)
    image = models.ImageField(upload_to=rename_image_file, width_field='width', height_field='height')
    size = models.TextField()
    price = models.PositiveIntegerField()
    tags = models.ManyToManyField(Tag)
    category = models.ForeignKey(Category)
    created_datetime = models.DateTimeField(auto_now_add=True)

def __init__(self, *args, **kwargs):
    super(NormalImage,self).__init__(*args, **kwargs)
    if not self.id:
        self.size = Size.determineSizeDescription(anWidth=self.width, aHeight=self.height)
        self.price = Size.determinePrice(anWidth=self.width, aHeight=self.height)

def get_created_datetime_str(self):
    return self.created_datetime.strftime('%Y-%m-%d %H:%M:%S')

def get_image_url(self):
    return 'http://photocoapi-env-x2ezvferc7.elasticbeanstalk.com/images/' + str(self.id) + '/'

错误代码:

  

IO / at / requests /   decoder jpeg not available请求方法:GET请求URL:
  http://photoco-env-z5cnmns3pe.elasticbeanstalk.com/me/requests/ Django   版:   1.6.5异常类型:IOError异常值:解码器jpeg不可用异常位置:   /opt/python/run/venv/lib/python2.7/site-packages/PIL/Image.py in   _getdecoder,第413行Python可执行文件:/ opt / python / run / venv / bin / python Python版本:   2.7.5 Python路径:['/ opt / python / run / venv / lib / python2.7 / site-package',   '/ opt / python / current / app','/ opt / python / bundle / 4 / app',   '/opt/python/run/baselinenv/lib64/python27.zip',   '/opt/python/run/baselinenv/lib64/python2.7',   '/opt/python/run/baselinenv/lib64/python2.7/plat-linux2',   '/opt/python/run/baselinenv/lib64/python2.7/lib-tk',   '/opt/python/run/baselinenv/lib64/python2.7/lib-old',   '/opt/python/run/baselinenv/lib64/python2.7/lib-dynload',   '/usr/lib64/python2.7','/ usr / lib / python2.7',   '/opt/python/run/baselinenv/lib/python2.7/site-packages']

我试图解决这个问题:

  • 我通过SSH连接到beanstalk服务器,并使用yum
  • 安装在库下面
  • yum:libjpeg-devel,zlib-devel,freetype-devel

    • 然后制作符号链接

      $ sudo ln -s /usr/lib64/libjpeg.so / usr / lib $ sudo ln -s /usr/lib64/zlib.so / usr / lib $ sudo ln -s /usr/lib64/freetype.so / usr / lib

3 个答案:

答案 0 :(得分:2)

您可以添加名为" requirements.txt"的文件。在您的应用程序源中包含所有必需的依赖项,AWS Elastic Beanstalk将为您安装依赖项。

您可以使用ebextensions安装yum软件包。在您的应用源中创建一个名为.ebextensions/01-yum.config的文件,并将以下内容放入其中。

packages: 
  yum:
    libjpeg-devel: [] 
    <another-package>: []

此文件采用YAML格式,因此缩进非常重要。

在此处阅读有关ebextensions的pacakges部分的更多信息:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-packages

这是一个关于在Elastic Beanstalk中使用requirements.txt的教程。

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_python_console.html

答案 1 :(得分:0)

必须安装支持JPEG图像的依赖项 BEFORE 使用pip安装Pillow(用于解码图像的python库)。

所以你应该尝试:

  • 卸载Pillow

    pip uninstall pillow

  • 安装jpeg库

    yum install libjpeg-devel

  • 重新安装枕头

    pip install pillow

答案 2 :(得分:0)

yum找不到libjpeg-devel。但这对我有用:

protocol Common {  }
protocol Abc {  }
protocol xyz: Common {  }
protocol my: Common  {  }

extension Abc where Self: Common {

}

希望这有助于某人 干杯!