I have a django application app in which there is a model booking and the idea is that when someone books
- the model calculates some metrics
 - generates a plotly figure and exports it statically
 - it sends a message to the respective user via email.
 
Before the email had plain text. In order to test the new changes. Ive done something of this sort.
def send_notification(self):
    try:
        mail_msg = new_email()
        mail_msg.send()
    except Exception as e:
        logger.error(f"failed to send new booking mail due to {e}"
    
    mail_msg = old_mail()
    mail_msg.send()
Working, and debugging locally had no issues with using kaleido as the export engine when attaching the image to new_mail, namely.
fig.to_image("png", engine="kaleido")
Pipeline is as follows, FE book -> SQS -> send_notification()
On AWS I did not get any errors when the new code was deployed, and I also did not get any mails, not the new ones, not the old ones. After 1 hour, the 10 attempts that I've made powered through, both in email and in the logs naturally. But I just got the old emails, as I expected.
Logs show
Error initializing NSS with a persistent database (sql:/home/webapp/.pki/nssdb): /lib64/libm.so.6: version `GLIBC_2.29' not found (required by /var/app/venv/staging-LQM1lest/lib/python3.8/site-packages/kaleido/executable/lib/libsqlite3.so.0)
[ERROR] failed to send new booking mail due to 'Transform failed. Error stream'
I understand that upgrading glibc standalone can break your system quite easily. I am going to try downgrading kaleido.
Is there other thing I could try to solve this? All the options I can think of are
- downgrading kaleido (it would be amazing to check which version of glibc they require first)
 - creating a lambda just to 
fig.to_image()