Python flask应用程序在本地运行,但部署到heroku时崩溃
我有一个flask应用程序在部署到Heroku时崩溃,它在本地运行良好,使用ProcfilePython flask应用程序在本地运行,但部署到heroku时崩溃,python,flask,heroku,gunicorn,Python,Flask,Heroku,Gunicorn,我有一个flask应用程序在部署到Heroku时崩溃,它在本地运行良好,使用Procfilegunicorn wsgi:app中完全相同的命令 相关heroku日志: 2021-02-02T00:10:31.529605+00:00 app[web.1]: File "/app/wsgi.py", line 4, in <module> 2021-02-02T00:10:31.529605+00:00 app[web.1]: app = create_
gunicorn wsgi:app中完全相同的命令
相关heroku日志:
2021-02-02T00:10:31.529605+00:00 app[web.1]: File "/app/wsgi.py", line 4, in <module>
2021-02-02T00:10:31.529605+00:00 app[web.1]: app = create_app()
2021-02-02T00:10:31.529606+00:00 app[web.1]: File "/app/app/__init__.py", line 15, in create_app
2021-02-02T00:10:31.529606+00:00 app[web.1]: from . import routes
2021-02-02T00:10:31.529606+00:00 app[web.1]: File "/app/app/routes.py", line 6, in <module>
2021-02-02T00:10:31.529606+00:00 app[web.1]: from package.reservation_factory import ReservationFactory
2021-02-02T00:10:31.529606+00:00 app[web.1]: File "/app/package/reservation_factory.py", line 2, in <module>
2021-02-02T00:10:31.529607+00:00 app[web.1]: from package.provider import ProviderReservation
2021-02-02T00:10:31.529607+00:00 app[web.1]: File "/app/package/provider.py", line 12, in <module>
2021-02-02T00:10:31.529607+00:00 app[web.1]: from package.reservation import Reservation
2021-02-02T00:10:31.529608+00:00 app[web.1]: ModuleNotFoundError: No module named 'package.reservation'
2021-02-02T00:10:31.529902+00:00 app[web.1]: [2021-02-02 00:10:31 +0000] [7] [INFO] Worker exiting (pid: 7)
项目结构的问题是缺少顶层\uuuu init\uuuuu.py
文件。这个文件是制作Python包所必需的,您可以从中导入
虽然不是强制性的,但许多项目都采用src
布局,如下所示:
❯ tree src/
src/
└── reservation_app
├── app
│ ├── forms.py
│ ├── __init__.py
│ ├── routes.py
│ └── templates
├── __init__.py
└── package
├── __init__.py
├── provider.py
├── reservation_factory.py
└── reservation.py
4 directories, 8 files
不过,您需要调整您的导入
如果您想了解更多关于为什么src
布局是件好事的信息,请查看这些博客文章
感谢您的回答,但不幸的是,Heroku在将\uuu init\uuuu.py
添加到顶层后仍会因相同的错误崩溃。此外,缺少的模块来自package.provider import provider reservation的调用,该调用来自package.reservation的另一个调用\u factory import ReservationFactory
,两者都位于同一package
目录中。这不意味着应用程序已经能够找到目录了吗?你能给你展示一下新的目录结构吗?无法从包中执行。提供程序导入smth。。您必须从xxx.package.provider.reservation\u factory import ReservationFactory执行,因此始终从顶层执行。你的应用程序在GitHub上可用吗?然后我可以看一看。否则,请尝试遵循我的模式,并首先确保它在本地工作。(Disclamier:我从未使用过Heroku,但我创建了相当多的Flask应用程序,并将它们部署到生产环境中)。它在本地一直运行良好,问题在于Heroku的部署。不管怎么说,我把文件名和导入从reservation
改为reservations
,现在可以了,不要再碰它了-不管怎样,很高兴听到它在工作。
❯ tree src/
src/
└── reservation_app
├── app
│ ├── forms.py
│ ├── __init__.py
│ ├── routes.py
│ └── templates
├── __init__.py
└── package
├── __init__.py
├── provider.py
├── reservation_factory.py
└── reservation.py
4 directories, 8 files