在 heroku 上部署的 django rest 框架应用程序的应用程序错误

Application error on deployed django rest framework app on heroku

我正在尝试在 Heroku 上部署我的 django rest 框架应用程序。我读了许多其他类似的问题,但我很困惑。我的应用程序结构不正确或者我遗漏了一些东西。

这是我在 git 上的结构:

 .gitignore  
 requirements.txt 
 src
    |
    --authorization
    --core
    --static
    --staticfiles
    --Procfile
    --manage.py
    --suacm
        |
        ---asgi.py
        ---settings.py
        ---urls.py
        ---wsgi.py

authorization和core是我的django项目下的apps。在 heroku 部署之前没有静态或静态文件。但它会自动创建静态文件。然后我还创建了 static 并按照说明通过 settings.py 中的更改使其工作。如果有人能帮我解决我在 heroku 上的问题以及为什么它不起作用,那就太好了。

这是 Procfile:

web: gunicorn suacm.wsgi
web: gunicorn suacm:app

当我使用此命令 运行 应用程序时,我的应用程序工作正常并且 运行 在本地:

gunicorn suacm.wsgi:application

但是我无法解决部署应用程序中的错误。

heroku logs --tail

我收到如下错误:

2021-05-21T14:32:20.000000+00:00 app[api]: Build succeeded
2021-05-21T14:32:26.505788+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/" host=suacm.herokuapp.com request_id=dfeba2ff-fa7d-4dfb-9337-706f50d286dc fwd="82.222.237.15" dyno= connect= service= status=503 bytes= protocol=https
2021-05-21T14:32:26.882608+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/favicon.ico" host=suacm.herokuapp.com request_id=292525ae-bc4e-49c7-b979-e455bbfd6b95 fwd="82.222.237.15" dyno= connect= service= status=503 bytes= protocol=https

当我运行这个

heroku ps:scale web=1 --app suacm

我明白了:

Scaling dynos... !
 ▸    Couldn't find that process type (web).

最后,当我尝试使用此命令在 src 文件夹下本地 运行 heroku 时

src % heroku local web

我收到这样的回复:

[INFO] Starting gunicorn 20.1.0
[INFO] Listening at: http://0.0.0.0:5000 (35246)
[INFO] Using worker: sync
[INFO] Booting worker with pid: 35247
Failed to find attribute 'app' in 'suacm'.
[INFO] Worker exiting (pid: 35247)
.
.

如果需要,这是我的 requirements.txt 文件:

django_environ==0.4.5
djangorestframework_simplejwt==4.6.0
django_filter==2.4.0
Django==3.1.3
djangorestframework==3.12.4
environ==1.0
PyJWT==2.1.0
gunicorn==20.1.0
django-on-heroku==1.1.2
whitenoise==5.2.0

这是我第一次部署 Django 应用程序。我希望我提供了足够的信息。只是询问是否需要更多信息。

将您的 Procfile 放在根目录中,而不是在 src 中

改变这个

web: gunicorn suacm.wsgi

web: gunicorn src.suacm.wsgi

那为什么它在本地服务器上工作?

在您的本地设置中,您从 src 目录启动服务器,该目录不是根目录!
但是在生产环境中,Heroku 从根目录启动应用程序,因为根目录中没有 Procfile,您会收到这些错误。