Gunicorn Worker не загружается в Azure Web App Linux - ModuleNotFoundError

У меня возникла проблема с развертыванием приложения Django на Azure Web App Linux с помощью Gunicorn. Процесс развертывания проходит успешно, но рабочий Gunicorn не загружается со следующей ошибкой:

[2024-03-07 04:42:30 +0000] [71] [ERROR] Exception in worker process
...
ModuleNotFoundError: No module named 'csvvalidator.validator.wsgi'
...

Вот мой YAML-файл:

trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.10'
    addToPath: true

- script: |
    python -m venv /home/site/wwwroot/antenv
    source /home/site/wwwroot/antenv/bin/activate
    pip install -r requirements.txt
  displayName: 'Install dependencies'

- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(Build.Repository.LocalPath)'
    includeRootFolder: false
    archiveType: 'zip'
    archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
    replaceExistingArchive: true

- task: PublishBuildArtifacts@1
  inputs:
    pathtoPublish: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
    artifactName: 'drop'
    publishLocation: 'Container'

- task: DownloadBuildArtifacts@0
  inputs:
    buildType: 'current'
    downloadType: 'single'
    artifactName: 'drop'
    downloadPath: '$(System.ArtifactStagingDirectory)'

- task: AzureRmWebAppDeployment@4
  inputs:
    ConnectionType: 'AzureRM'
    azureSubscription: 'Subscription'
    appType: 'webAppLinux'
    WebAppName: 'safe-lives-copilot-dev'
    packageForLinux: '$(System.ArtifactStagingDirectory)/**/*.zip'
    RuntimeStack: 'PYTHON|3.10'
    StartupCommand: 'gunicorn -b :8000 csvvalidator.validator.wsgi:application'

Виртуальная среда создана во время развертывания, но появилось предупреждение о том, что не удалось найти каталог виртуальной среды.

2024-03-07T04:42:30 WARNING: Could not find virtual environment directory /home/site/wwwroot/antenv.
2024-03-07T04:42:30 WARNING: Could not find package directory /home/site/wwwroot/__oryx_packages__.

Любые рекомендации или идеи по решению проблемы с загрузкой рабочего Gunicorn будут высоко оценены.

Я полагаю, что дело в переменной окружения. Вам нужно правильно ее определить. Можно использовать это в качестве ссылки

Настройка переменной среды Gunicorn

Согласно документу ModuleNotFoundError when app starts, эта ошибка чаще всего возникает, если вы развертываете виртуальную среду вместе с кодом. Виртуальное окружение не должно развертываться вместе с кодом приложения.

Вы можете исключить !venv/** из вашего zip-файла.

- task: CopyFiles@2
  inputs:
    Contents: |
      $(Build.Repository.LocalPath)/**
      !venv/**
      !.git/**
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: |
      $(Build.ArtifactStagingDirectory)
    includeRootFolder: false
    archiveType: 'zip'
    archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
    replaceExistingArchive: true

Кроме того, для настройки приложения следует установить SCM_DO_BUILD_DURING_DEPLOYMENT на 1.

также проверьте, является ли 'csvvalidator.validator.wsgi' частью вашего проекта Django, убедитесь, что на него правильно ссылаются.

Проблема заключалась в структуре папок. Kudu требует определенной структуры папок, я использовал это для руководства.

Решением стало удаление крайней cssvalidator папки.

Вернуться на верх