quarta-feira, 25 de julho de 2012

Problemas com Python Reportlab no Heroku

Este post ajuda a resolver um problema que pode parecer um "mistério", mas que pode ser reparado facilmente.

Estou trabalhando em um projeto web usando Django e escolhemos o Heroku para ser o ambiente de testes/homologação da aplicação. A escolha do Heroku deve-se a aspectos como plataforma poliglota, facilidade no deploy e escalabilidade.

Durante os testes na aplicação identificamos um erro na funcionalidade de geração de relatórios em pdf. A biblioteca mas usada para trabalhar com pdf em Python é Reportlab. É realmente robusta mas pode ser mostra trabalhosa para gerar conteúdos complexos.

Alguns dos nossos relatórios utilizam imagens. Sem problemas, pois o reportlab tem suporte a imagens de diversos formatos. Entretanto apresentava erro na criação do arquivo quando o deploy era feito no Heroku.

Erro: 'NoneType' object has no attribute 'Image'


Inicialmente verificamos que todas as dependências do projeto estavam satisfeitas e localmente ele funcionava bem. Ainda assim havia uma suspeita de que o Reportlab estivesse nos pregando uma peça.

Foi aí que pembrei que o  Reportlab utiliza a PIL internamente. Verifiquei o arquivo requirements.txt que lista as bibliotecas usadas no projeto a ser instaladas no Heroku, e não tinha a PIL instalada.

Instalei a PIL pelo pip no ambiente criado pelo virtualenv, atualizei o requirements.txt, fiz o deploy no Heroku e voilà!

Esse problema pode ocorrer em outros ambientes como Gondor.io.

Hasta la vista!

Um comentário:

dimas mikael disse...

bom dia ,
sou iniciante noi python,

preciso instalar reportlab, no Windows e no kali Linux,
mas não estou conseguindo ,
pode me ajudar?.

Desde já agradeço.