使用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中配置环境变量
- 登录Azure门户,找到你的Web App(
djangotutorial2) - 进入配置 > 应用程序设置页面
- 点击新建应用程序设置,添加键为
DATABASE_URL、值为你GitHub Secrets中存储的数据库连接字符串的条目 - 保存设置,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
相关产品推荐
相关产品推荐

