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

使用GitHub Actions部署DRF到Azure后DATABASE_URL配置异常

问题描述

我开发了一个简单的DRF应用,通过GitHub Actions部署至Azure Web Services。已经在YAML配置文件中设置从GitHub Secrets读取数据库连接字符串,构建阶段的迁移步骤执行正常,但部署完成后访问应用时出现报错,日志显示:

django.core.exceptions.ImproperlyConfigured: Set the DATABASE_URL environment variable

我明白这个错误的含义,但不知道如何覆盖environ.py中的连接字符串,尝试在GitHub中设置环境变量也没解决问题。以下是我的YAML配置文件:

name: Build and deploy Python app to Azure Web App

env:
  AZURE_WEBAPP_NAME: djangotutorial2    # set this to the name of your Azure Web App
  PYTHON_VERSION: '3.11.6'              # set this to the Python version to use
  DATABASE_URL: ${{ secrets.DATABASE_URL }}

on:
  push:
    branches: [ "main" ]
  workflow_dispatch:

permissions:
  contents: read

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Set up Python version
        uses: actions/setup-python@v3.0.0
        with:
          python-version: ${{ env.PYTHON_VERSION }}
          cache: 'pip'

      - name: Create and start virtual environment
        run: |
          python3 -m venv venv
          source venv/bin/activate
          
      - name: Upgrade pip
        run: python -m pip install --upgrade pip

      - name: Install dependencies
        run: pip install -r requirements.txt
      
      - name: install python-xlib
        run: pip install python-xlib

      - name: apply migrations
        run: python3 manage.py migrate

      # Optional: Add step to run tests here (PyTest, Django test suites, etc.)

      - name: Upload artifact for deployment jobs
        uses: actions/upload-artifact@v3
        with:
          name: python-app
          path: |
            .
            !venv/

  deploy:
    permissions:
      contents: none
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'Development'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}

    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v3
        with:
          name: python-app
          path: .

      - name: 'Deploy to Azure Web App'
        id: deploy-to-webapp
        uses: azure/webapps-deploy@v2
        with:
          app-name: ${{ env.AZURE_WEBAPP_NAME }}
          publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
解决方案

你的问题核心是GitHub Actions中定义的DATABASE_URL仅在构建/迁移阶段生效,并没有传递到Azure Web App的运行环境中,所以部署后应用读取不到这个环境变量。下面是两种可行的解决方法:

方法一:直接在Azure Web App中配置环境变量

  1. 登录Azure门户,找到你的Web App(djangotutorial2)
  2. 进入配置 > 应用程序设置页面
  3. 点击新建应用程序设置,添加键为DATABASE_URL、值为你GitHub Secrets中存储的数据库连接字符串的条目
  4. 保存设置,Azure会自动重启Web App,之后应用就能读取到这个环境变量

方法二:在GitHub Actions部署步骤中传递环境变量

修改你的YAML配置文件,在deploy阶段的azure/webapps-deploy步骤中添加app-settings-json参数,直接传递环境变量:

- name: 'Deploy to Azure Web App'
  id: deploy-to-webapp
  uses: azure/webapps-deploy@v2
  with:
    app-name: ${{ env.AZURE_WEBAPP_NAME }}
    publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
    app-settings-json: |
      {
        "DATABASE_URL": "${{ secrets.DATABASE_URL }}"
      }

这样部署时会自动将DATABASE_URL注入到Azure Web App的运行环境中。

额外检查:确保environ.py正确读取环境变量

确认你的environ.py(或Django配置文件)是直接从环境变量读取DATABASE_URL,而不是硬编码或从其他未同步的配置文件读取。示例配置:

# settings.py 或 environ.py中的相关代码
import environ

env = environ.Env()
# 确保这里没有覆盖DATABASE_URL的默认值,而是优先读取环境变量
DATABASES = {
    'default': env.db(),  # 这会自动读取DATABASE_URL环境变量
}

内容的提问来源于stack exchange,提问作者Radu Alexandru

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:47:35