【发布时间】:2021-03-01 00:31:41
【问题描述】:
我有一个使用 Weasyprint 生成 PDF 输出的 Django 应用程序。这在我的本地开发机器上运行良好。
我能够成功部署到 Azure Web Apps,但收到以下错误消息:
2020-11-17T07:34:14.287002623Z OSError: no library called "cairo" was found
2020-11-17T07:34:14.287006223Z no library called "libcairo-2" was found
2020-11-17T07:34:14.287009823Z cannot load library 'libcairo.so.2': libcairo.so.2: cannot open shared
object file: No such file or directory
2020-11-17T07:34:14.287016323Z cannot load library 'libcairo.2.dylib': libcairo.2.dylib: cannot open
shared object file: No such file or directory
2020-11-17T07:34:14.287020123Z cannot load library 'libcairo-2.dll': libcairo-2.dll: cannot open
shared object file: No such file or directory
根据 Weasyprint 的文档 (https://weasyprint.readthedocs.io/en/stable/install.html#debian-ubuntu),我尝试通过如下所示的自定义部署脚本进行推荐安装:
jobs:
build:
name: Build and Deploy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ env.PYTHON_VERSION }}
uses: actions/setup-python@v2
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Install dependencies
run: |
sudo apt-get install build-essential python3-dev python3-pip python3-setuptools python3-wheel python3-cffi libcairo2 libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf2.0-0 libffi-dev shared-mime-info
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Deploy Web App using GH Action azure/webapps-deploy
uses: azure/webapps-deploy@v2
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
但是,我的问题仍然存在,我仍然收到相同的消息。
有人有在基于 Linux 的 Web 应用程序上安装 Weasyprint 和 Cairo 的经验吗?
感谢您提前提供的任何帮助。
更新
目前,我可以使用 Azure 创建的默认部署脚本进行部署(如下所示)。然后我可以通过 SSH 连接到部署机器并手动激活虚拟环境并安装必要的软件包。此过程有效,我的应用程序现在按预期工作。
我想以某种方式将此命令滚动到部署过程中(作为默认脚本的一部分或通过部署后操作)。
GITHUB 操作部署脚本
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: Set up Python version
uses: actions/setup-python@v1
with:
python-version: '3.6'
- name: Build using AppService-Build
uses: azure/appservice-build@v2
with:
platform: python
platform-version: '3.6'
- name: 'Deploy to Azure Web App'
uses: azure/webapps-deploy@v2
with:
app-name: {{appname}}
slot-name: {{slotname}}
publish-profile: {{profilename}}
手动虚拟环境激活和安装
source /home/site/wwwroot/pythonenv3.6/bin/activate
sudo apt-get install {{ additional packages }}
【问题讨论】:
-
很难说,我会冒险猜测你的本地机器有一个GUI,而你的Azure服务器很可能没有;因此它将缺少
cairo以及可能的其他一些库及其开发对应物......您正在运行哪个版本的 Linux,无论是在您的开发盒还是在您的 azure 实例中? -
所以我实际上只是能够通过 SSH 手动解决这个问题到部署机器并手动激活虚拟环境并安装 Weasyprint 文档中推荐的软件包。但是,每次部署新版本时,我都必须重新执行此操作。有没有办法在部署脚本中包含这些依赖项的安装?
-
您能否在没有任何机密信息和业务的情况下分享您的演示代码。所以我们可以尝试解决它并帮助您。
-
谢谢杰森。我添加了当前有效的代码并生成了一个有效的应用程序。但是,我想简化这是一个两步流程。
-
我已经回复了你所有的三个帖子。我已经尝试了所有需要为您使用的方法。你可以尝试自己执行,应该对你有用,如果不行,请提出支持票寻求官方帮助。
标签: python linux azure-web-app-service cairo weasyprint