IOError: не удается определить, что файл изображения работает локально, но не на Heroku

Я знаю, что в StackOverflow есть миллион вопросов и ответов об этой ошибке, и я прочитал их все и попробовал многие из их предложений (Pillow вместо PIL, io.BytesIO вместо stringIO), но я все еще получаю ту же проблему. со следующим:

Я работаю над кодом для обработки изображений из S3 — в частности, для их повторного сохранения в формате JPG, поворота при необходимости и создания различных эскизов. Соответствующая часть кода получает список URL-адресов, ссылающихся на изображения на S3. Я могу подтвердить, что да, изображения находятся на S3 в месте, указанном URL-адресом. На каждом URL я вызываю следующее:

def process_new_image(file_url):        
    # Load the image and make it a PIL object
    try:
        fd = urllib.urlopen(file_url)
        image_file = io.BytesIO(fd.read())
        image = Image.open(image_file)
    except Exception, e:
        # ===> This is where the issue happens. <====
        raise

    # Read the exif data and potentially rotate the image
    transpose = Transpose()
    transposed_image = transpose.process(image)

    # Resave the image as a jpeg
    new_image_data = io.BytesIO()
    transposed_image.save(new_image_data, 'jpeg', quality=100)
    new_image_data.seek(0)

    try:
        self.image.save('image', ContentFile(new_image_data.read()), save=True)
    except Exception, e:         
        raise

    new_image_data.seek(0)
    self.process_thumbnails(new_image_data)

Этот код отлично работает локально. Но когда я запускаю его в своей тестовой среде в Heroku, я получаю «IOError: не удается идентифицировать файл изображения». Он не работает с JPG, PNG и GIF, которые работают локально.

Особенности моей среды:

Джанго == 1.5.1

Подушка == 2.1.0

пилкит==1.1.1

Python 2.7.3 (на обоих)

Локально Pillow скомпилирован с:

--- TKINTER support available
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
*** TIFF G3/G4 (experimental) support not available
--- FREETYPE2 support available
*** LITTLECMS support not available
*** WEBP support not available

На подушке Heroku, скомпилированной с:

       *** TKINTER support not available
       --- JPEG support available
       --- ZLIB (PNG/ZIP) support available
       --- TIFF G3/G4 (experimental) support available
       --- FREETYPE2 support available
       --- LITTLECMS support available
       *** WEBP support not available

person TAH    schedule 13.08.2013    source источник
comment
Хммм, похоже, это связано с базовой корзиной S3. Если изображение общедоступно, то код работает. Если нет, то нет. Но я не могу сделать изображение общедоступным по умолчанию. Я попытался stackoverflow.com/questions /2547046/, но это не сработало -- только ручная установка изображения в общедоступные работы, что очевидно. не вариант...   -  person TAH    schedule 14.08.2013
comment
Да, можно программно установить файл как общедоступный с помощью k.set_acl('public-read').   -  person TAH    schedule 14.08.2013


Ответы (1)


Проблема, связанная с корзиной S3. Изображение должно быть опубликовано в ведре. Вопрос следует закрыть.

person TAH    schedule 14.08.2013