You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure App Service(Oryx)未使用自定义启动命令致部署失败

解决Azure App Service部署Django DRF(Pipenv管理依赖)时Oryx自动生成脚本导致依赖缺失的问题

问题根源

  • Oryx是Azure App Service默认的构建工具,会自动检测Python项目并生成启动脚本、创建antenv虚拟环境,但它不支持Pipfile/Pipfile.lock,导致依赖无法正确安装。
  • 自定义startup.sh未生效,是因为Oryx的自动处理逻辑优先级高于自定义启动脚本,只要Oryx检测到Python项目,就会忽略自定义脚本。

解决步骤

1. 禁用Oryx自动构建

在Azure App Service的应用设置中添加配置项:

  • 键:DISABLE_ORYX_BUILD
  • 值:true

或者在Azure DevOps的CD部署任务中,通过应用设置参数直接注入该配置,确保部署时自动生效。

2. 编写正确的自定义startup.sh脚本

脚本需要完成pipenv安装、依赖安装、应用启动的完整流程,示例如下:

#!/bin/bash
# 升级pip并安装pipenv(若环境未预装)
pip install --upgrade pip
pip install pipenv

# 基于Pipfile.lock安装生产依赖(--deploy确保依赖版本严格匹配)
pipenv install --deploy --ignore-pipfile

# 启动Django应用(替换为你的项目WSGI模块路径)
pipenv run gunicorn --bind=0.0.0.0 --timeout 600 your_project_name.wsgi:application

注意:将your_project_name.wsgi替换为实际项目的WSGI模块路径,比如myapi.wsgi。

3. 确保startup.sh拥有执行权限

在Azure DevOps的CI流水线中,打包工件前执行以下命令,给脚本添加执行权限:

chmod +x startup.sh

若遗漏此步骤,App Service将无法执行自定义脚本。

4. 指定App Service使用自定义启动脚本

在App Service的配置 > 常规设置中,将启动命令设置为:

./startup.sh

或者在Azure DevOps的CD部署任务(如Azure App Service Deploy)中,在启动命令字段填入上述内容。

验证部署

部署完成后,查看App Service的日志流:

  • 确认日志中出现startup.sh的执行记录
  • 检查依赖安装过程无报错
  • 确认Django应用正常启动,无ModuleNotFoundError类错误

内容的提问来源于stack exchange,提问作者Oberwalder Sven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 20:22:34