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 будут высоко оценены.
Я полагаю, что дело в переменной окружения. Вам нужно правильно ее определить. Можно использовать это в качестве ссылки
Согласно документу 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
папки.