Gunicorn Worker在Azure Web App Linux启动失败 - 找不到模块错误

-1 投票
2 回答
110 浏览
提问于 2025-04-14 17:47

我在用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文件夹。

撰写回答