I have a question regarding deploying a function in the Azure portal.
I had a project for data visualizations that I wrote that code with Matplotlib and I deployed it on Azure, and right now is on production.
Then, I added some other graphs but this time I used Plotly. I am able to run the Azure function locally and I don’t have any problems with it. It will return the value correctly with status 200ok on Postman. However, when I deploy it on the Azure portal, I got status 500 internal servers!
Can anyone help me with this?
Note that I have a requirements file that has Plotly and everything I need on it in the same folder that I am deploying. Should I install plotly on Microsoft Azure myself?!? I assume that it can read from the requirements file
Note that I don’t have this problem with the graphs that I used Matplotlib for them. I just have this problem with the graphs I used Plotly for them.
Below, I put the small sample of my code that I can run it locally on postman, and it will return status 200Ok with string but when I deploy it on Azure, I receive 500 internal server problem
import logging import azure.functions as func import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt import numpy as np #import cv2 import base64 import os import tempfile from cv2 import cv2 import plotly.graph_objs as go def graphing(shortID, data, labels, dims = (600, 300), format = 'png', **render_details): if shortID == 'M': print("shortID", shortID) myfig = go.Figure(go.Bar( x=data, y=data, orientation='h')) tempFilePath = tempfile.gettempdir() try: file_path = os.path.join(tempFilePath, 'plot.'+ format) myfig.write_image(file_path) img = cv2.imread(file_path) _, im_arr = cv2.imencode('.'+format, img) im_bytes = im_arr.tobytes() response = base64.b64encode(im_bytes) os.remove(file_path) except: file_path = os.path.join(tempFilePath, 'plot.png') myfig.write_image(file_path) img = cv2.imread(file_path) _, im_arr = cv2.imencode('.png', img) im_bytes = im_arr.tobytes() response = base64.b64encode(im_bytes) #response = im_b64.decode("utf-8") os.remove(file_path) return response def main(req: func.HttpRequest) -> func.HttpResponse: logging.info('Python HTTP trigger function processed a request.') shortID = req.params.get('shortID') data = req.params.get('data') labels = req.params.get('labels') image_format =req.params.get('format') if not shortID or not data or not labels: try: req_body = req.get_json() except ValueError: pass else: shortID = req_body.get('shortID') data = req_body.get('data') labels = req_body.get('labels') image_format = req_body.get('format') #print("image_format", image_format) if shortID and data and labels: im_str = graphing(shortID, data, labels, format = image_format) if shortID: if image_format: try: print("try image") return func.HttpResponse(body=im_str, mimetype='image/'+image_format) except: print("except image") return func.HttpResponse(body=im_str, mimetype='image/png') else: print("else image") return func.HttpResponse(body=im_str, mimetype='image/png') else: return func.HttpResponse( "Please pass required parameters on the query string or in the request body", status_code=400 )