如何在 Linux 中的 NodeJs Azure Functions 上修复“错误:/home/site/wwwroot/node_modules/canvas/build/Release/canv

Posted

技术标签:

【中文标题】如何在 Linux 中的 NodeJs Azure Functions 上修复“错误:/home/site/wwwroot/node_modules/canvas/build/Release/canvas.node:无效的 ELF 标头”?【英文标题】:How to fix "Error: /home/site/wwwroot/node_modules/canvas/build/Release/canvas.node: invalid ELF header" on NodeJs Azure Functions in Linux? 【发布时间】:2022-01-04 03:28:47 【问题描述】:

我正在尝试在 NodeJs 中部署 AzureFunctions,但它在 Azure 上不起作用。 我的应用是在 Linux 上运行的 v3 函数。

部署完成后,我收到此 500 错误:

错误: /home/site/wwwroot/node_modules/canvas/build/Release/canvas.node: 无效的 ELF 标头

仅当我执行此导入时才会发生:

 import ChartDataLabels from 'chartjs-plugin-datalabels';
 const canvasRenderService = new CanvasRenderService(width, height, chartCallback);

 const chartCallback = (ChartJS) => 
     ChartJS.register(require('chartjs-plugin-datalabels'))
 ;
 const jsdom = require("jsdom");
 const  JSDOM  = jsdom;
 const  document  = (new JSDOM(`...`)).window;

有人可以帮帮我吗?

它(仅)在我的机器上工作:(

编辑:当我通过 Linux 子系统进行部署时它可以工作。 我希望这会对某人有所帮助。

【问题讨论】:

ELF 是一种可执行程序格式。您有一个针对错误架构编译的程序/二进制文件。我不使用画布,所以我无法提供进一步的建议。 npmjs.com/package/canvas 【参考方案1】:

Azure 函数部署到 azure 时不会包含 Node_modules。因为Node_modules 目录包含非常大的文件。您可以在函数目录中包含 package.json 并运行 npm install,就像在 Azure 中使用 Kudu (https://<function_app_name>.scm.azurewebsites.net )Console 的 Node.js 项目一样门户。

查看Dependency management了解更多信息。

参考这里Link 1 & Link 2

【讨论】:

如果回答对您有帮助,请Accept it as an Answer,以便遇到相同问题的其他人可以找到此解决方案并解决他们的问题。

以上是关于如何在 Linux 中的 NodeJs Azure Functions 上修复“错误:/home/site/wwwroot/node_modules/canvas/build/Release/canv的主要内容,如果未能解决你的问题,请参考以下文章

如何查找 NodeJS 上是不是存在 Azure 文件

如何循环集合中的所有文档-Azure CosmosDB-Nodejs

使用Azure Functions中的NodeJS将文件保存到Azure Data Lake Storage的任何示例?

我们如何使用代理和 NodeJS 从 azure 存储下载 blob?

如何从 Azure 函数内部发出基于承诺的 HTTP 发布请求 (NodeJS)?

使用NodeJS,如何将文件上传到azure容器/目录(如:test-container/folder-test)