Gunicorn Worker在Azure Web App Linux启动失败 - 找不到模块错误
我在用Gunicorn把一个Django应用部署到Azure Web App Linux时遇到了问题。虽然部署过程看起来成功了,但Gunicorn的工作进程启动失败,出现了以下错误:
[2024-03-08 07:32:30 +0000] [71] [ERROR] Exception in worker process
...
2024-03-08T07:32:38.548081541Z ModuleNotFoundError: No module named 'validator'
...
csvvalidator
是Django项目的名字,validator
是应用的名字。文件夹的结构大致是这样的:
- csvvalidator/
- csvvalidator/
wsgi.py
setting.py
...
- validator/
__init__.py
...
- manage.py
...
另外,在settings.py文件中,我已经把validator
放进了INSTALLED_APPS
里。如果有人能提供一些解决Gunicorn工作进程启动失败的建议或见解,我将非常感激。
2 个回答
0
根据文档 应用启动时的ModuleNotFoundError,这个错误通常发生在你把虚拟环境和代码一起部署的时候。其实,虚拟环境不应该和你的应用代码一起发布。
你可以在压缩文件中排除 !venv/**
。
- 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项目的一部分,确保它被正确引用。
0
问题出在文件夹的结构上。Kudu需要特定的文件夹结构,我是参考了这个来帮助我的。
解决办法是删除最外层的cssvalidator
文件夹。