【问题标题】:heroku gunicorn / Flask App Running Errorheroku gunicorn / Flask App运行错误
【发布时间】:2021-06-24 07:28:10
【问题描述】:

我正在尝试将我的第一个烧瓶应用程序推送到 heroku,但我无法弄清楚问题所在。我已经多次尝试通过跟踪错误来找到问题,但我觉得我在旋转。这个应用程序在本地工作,但在 heroku 上没有

我尝试了许多不同的方法,并手动更正了 requirements.txt 版本以消除版本问题,但我无法弄清楚当前的问题是什么。

这是 heroku 日志 --tail 输出:

$ heroku logs --tail
2021-03-27T17:31:01.216069+00:00 app[web.1]: return self.load_wsgiapp()
2021-03-27T17:31:01.216070+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp
2021-03-27T17:31:01.216070+00:00 app[web.1]: return util.import_app(self.app_uri)
2021-03-27T17:31:01.216070+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/util.py", line 358, in import_app
2021-03-27T17:31:01.216071+00:00 app[web.1]: mod = importlib.import_module(module)
2021-03-27T17:31:01.216071+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/importlib/__init__.py", line 126, in import_module
2021-03-27T17:31:01.216072+00:00 app[web.1]: return _bootstrap._gcd_import(name[level:], package, level)
2021-03-27T17:31:01.216072+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 994, in _gcd_import
2021-03-27T17:31:01.216073+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 971, in _find_and_load
2021-03-27T17:31:01.216073+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
2021-03-27T17:31:01.216080+00:00 app[web.1]: ModuleNotFoundError: No module named 'app'
2021-03-27T17:31:01.216311+00:00 app[web.1]: [2021-03-27 17:31:01 +0000] [9] [INFO] Worker exiting (pid: 9)
2021-03-27T17:31:01.257899+00:00 app[web.1]: [2021-03-27 17:31:01 +0000] [10] [INFO] Booting worker with pid: 10
2021-03-27T17:31:01.271113+00:00 app[web.1]: [2021-03-27 17:31:01 +0000] [10] [ERROR] Exception in worker process
2021-03-27T17:31:01.271116+00:00 app[web.1]: Traceback (most recent call last):
2021-03-27T17:31:01.271116+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
2021-03-27T17:31:01.271117+00:00 app[web.1]: worker.init_process()
2021-03-27T17:31:01.271117+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 119, in init_process
2021-03-27T17:31:01.271118+00:00 app[web.1]: self.load_wsgi()
2021-03-27T17:31:01.271118+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 144, in load_wsgi
2021-03-27T17:31:01.271119+00:00 app[web.1]: self.wsgi = self.app.wsgi()
2021-03-27T17:31:01.271119+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
2021-03-27T17:31:01.271120+00:00 app[web.1]: self.callable = self.load()
2021-03-27T17:31:01.271120+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 49, in load
2021-03-27T17:31:01.271120+00:00 app[web.1]: return self.load_wsgiapp()
2021-03-27T17:31:01.271121+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp
2021-03-27T17:31:01.271121+00:00 app[web.1]: return util.import_app(self.app_uri)
2021-03-27T17:31:01.271122+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/util.py", line 358, in import_app
2021-03-27T17:31:01.271122+00:00 app[web.1]: mod = importlib.import_module(module)
2021-03-27T17:31:01.271123+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/importlib/__init__.py", line 126, in import_module
2021-03-27T17:31:01.271123+00:00 app[web.1]: return _bootstrap._gcd_import(name[level:], package, level)
2021-03-27T17:31:01.271123+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 994, in _gcd_import
2021-03-27T17:31:01.271124+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 971, in _find_and_load
2021-03-27T17:31:01.271124+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
2021-03-27T17:31:01.271199+00:00 app[web.1]: ModuleNotFoundError: No module named 'app'
2021-03-27T17:31:01.271576+00:00 app[web.1]: [2021-03-27 17:31:01 +0000] [10] [INFO] Worker exiting (pid: 10)
2021-03-27T17:31:01.395630+00:00 app[web.1]: [2021-03-27 17:31:01 +0000] [4] [INFO] Shutting down: Master
2021-03-27T17:31:01.395757+00:00 app[web.1]: [2021-03-27 17:31:01 +0000] [4] [INFO] Reason: Worker failed to boot.
2021-03-27T17:31:01.525831+00:00 heroku[web.1]: Process exited with status 3
2021-03-27T17:31:01.610510+00:00 heroku[web.1]: State changed from starting to crashed
2021-03-27T17:31:01.614922+00:00 heroku[web.1]: State changed from crashed to starting
2021-03-27T17:31:03.000000+00:00 app[api]: Build succeeded
2021-03-27T17:31:09.148954+00:00 heroku[web.1]: Starting process with command `gunicorn app:app`
2021-03-27T17:31:11.566273+00:00 app[web.1]: [2021-03-27 17:31:11 +0000] [4] [INFO] Starting gunicorn 20.0.4
2021-03-27T17:31:11.566853+00:00 app[web.1]: [2021-03-27 17:31:11 +0000] [4] [INFO] Listening at: http://0.0.0.0:56319 (4)
2021-03-27T17:31:11.566948+00:00 app[web.1]: [2021-03-27 17:31:11 +0000] [4] [INFO] Using worker: sync
2021-03-27T17:31:11.571477+00:00 app[web.1]: [2021-03-27 17:31:11 +0000] [9] [INFO] Booting worker with pid: 9
2021-03-27T17:31:11.577573+00:00 app[web.1]: [2021-03-27 17:31:11 +0000] [9] [ERROR] Exception in worker process
2021-03-27T17:31:11.577574+00:00 app[web.1]: Traceback (most recent call last):
2021-03-27T17:31:11.577575+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
2021-03-27T17:31:11.577576+00:00 app[web.1]: worker.init_process()
2021-03-27T17:31:11.577576+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 119, in init_process
2021-03-27T17:31:11.577576+00:00 app[web.1]: self.load_wsgi()
2021-03-27T17:31:11.577577+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 144, in load_wsgi
2021-03-27T17:31:11.577578+00:00 app[web.1]: self.wsgi = self.app.wsgi()
2021-03-27T17:31:11.577578+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
2021-03-27T17:31:11.577579+00:00 app[web.1]: self.callable = self.load()
2021-03-27T17:31:11.577579+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 49, in load
2021-03-27T17:31:11.577580+00:00 app[web.1]: return self.load_wsgiapp()
2021-03-27T17:31:11.577580+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp
2021-03-27T17:31:11.577581+00:00 app[web.1]: return util.import_app(self.app_uri)
2021-03-27T17:31:11.577581+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/util.py", line 358, in import_app
2021-03-27T17:31:11.577582+00:00 app[web.1]: mod = importlib.import_module(module)
2021-03-27T17:31:11.577582+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/importlib/__init__.py", line 126, in import_module
2021-03-27T17:31:11.577583+00:00 app[web.1]: return _bootstrap._gcd_import(name[level:], package, level)
2021-03-27T17:31:11.577583+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 994, in _gcd_import
2021-03-27T17:31:11.577583+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 971, in _find_and_load
2021-03-27T17:31:11.577584+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
2021-03-27T17:31:11.577589+00:00 app[web.1]: ModuleNotFoundError: No module named 'app'
2021-03-27T17:31:11.577776+00:00 app[web.1]: [2021-03-27 17:31:11 +0000] [9] [INFO] Worker exiting (pid: 9)
2021-03-27T17:31:11.580125+00:00 app[web.1]: [2021-03-27 17:31:11 +0000] [10] [INFO] Booting worker with pid: 10
2021-03-27T17:31:11.587148+00:00 app[web.1]: [2021-03-27 17:31:11 +0000] [10] [ERROR] Exception in worker process
2021-03-27T17:31:11.587149+00:00 app[web.1]: Traceback (most recent call last):
2021-03-27T17:31:11.587150+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
2021-03-27T17:31:11.587151+00:00 app[web.1]: worker.init_process()
2021-03-27T17:31:11.587151+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 119, in init_process
2021-03-27T17:31:11.587152+00:00 app[web.1]: self.load_wsgi()
2021-03-27T17:31:11.587152+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 144, in load_wsgi
2021-03-27T17:31:11.587152+00:00 app[web.1]: self.wsgi = self.app.wsgi()
2021-03-27T17:31:11.587153+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
2021-03-27T17:31:11.587154+00:00 app[web.1]: self.callable = self.load()
2021-03-27T17:31:11.587154+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 49, in load
2021-03-27T17:31:11.587154+00:00 app[web.1]: return self.load_wsgiapp()
2021-03-27T17:31:11.587155+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp
2021-03-27T17:31:11.587155+00:00 app[web.1]: return util.import_app(self.app_uri)
2021-03-27T17:31:11.587155+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/util.py", line 358, in import_app
2021-03-27T17:31:11.587156+00:00 app[web.1]: mod = importlib.import_module(module)
2021-03-27T17:31:11.587156+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/importlib/__init__.py", line 126, in import_module
2021-03-27T17:31:11.587156+00:00 app[web.1]: return _bootstrap._gcd_import(name[level:], package, level)
2021-03-27T17:31:11.587157+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 994, in _gcd_import
2021-03-27T17:31:11.587160+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 971, in _find_and_load
2021-03-27T17:31:11.587161+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
2021-03-27T17:31:11.587165+00:00 app[web.1]: ModuleNotFoundError: No module named 'app'
2021-03-27T17:31:11.587315+00:00 app[web.1]: [2021-03-27 17:31:11 +0000] [10] [INFO] Worker exiting (pid: 10)
2021-03-27T17:31:11.720435+00:00 app[web.1]: [2021-03-27 17:31:11 +0000] [4] [INFO] Shutting down: Master
2021-03-27T17:31:11.720548+00:00 app[web.1]: [2021-03-27 17:31:11 +0000] [4] [INFO] Reason: Worker failed to boot.
2021-03-27T17:31:11.788282+00:00 heroku[web.1]: Process exited with status 3
2021-03-27T17:31:11.923225+00:00 heroku[web.1]: State changed from starting to crashed

procfile 是:

web: gunicorn app:app
heroku ps:scale web=1

项目文件结构如下:

E:.
├───flaskblog
│   ├───errors
│   │   └───__pycache__
│   ├───main
│   │   └───__pycache__
│   ├───posts
│   │   └───__pycache__
│   ├───static
│   │   └───profile_pics
│   ├───templates
│   │   ├───.vscode
│   │   └───errors
│   ├───users
│   │   └───__pycache__
│   ├───venv
│   │   ├───Include
│   │   ├───Lib
│   │   │   └───site-packages
│   │   │       ├───certifi
│   │   │       │   └───__pycache__
│   │   │       ├───certifi-2020.12.5.dist-info
│   │   │       ├───chardet
│   │   │       │   ├───cli
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───metadata
│   │   │       │   │   └───__pycache__
│   │   │       │   └───__pycache__
│   │   │       ├───chardet-4.0.0.dist-info
│   │   │       ├───click
│   │   │       │   └───__pycache__
│   │   │       ├───click-7.1.2.dist-info
│   │   │       ├───dns
│   │   │       │   ├───rdtypes
│   │   │       │   │   ├───ANY
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───CH
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───IN
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   └───__pycache__
│   │   │       │   └───__pycache__
│   │   │       ├───dnspython-2.1.0.dist-info
│   │   │       ├───email_validator
│   │   │       │   └───__pycache__
│   │   │       ├───email_validator-1.1.2.dist-info
│   │   │       ├───flask
│   │   │       │   ├───json
│   │   │       │   │   └───__pycache__
│   │   │       │   └───__pycache__
│   │   │       ├───Flask-1.1.2.dist-info
│   │   │       ├───flask_sqlalchemy
│   │   │       │   └───__pycache__
│   │   │       ├───Flask_SQLAlchemy-2.4.4.dist-info
│   │   │       ├───flask_wtf
│   │   │       │   ├───recaptcha
│   │   │       │   │   └───__pycache__
│   │   │       │   └───__pycache__
│   │   │       ├───Flask_WTF-0.14.3.dist-info
│   │   │       ├───idna
│   │   │       │   └───__pycache__
│   │   │       ├───idna-2.10.dist-info
│   │   │       ├───itsdangerous
│   │   │       │   └───__pycache__
│   │   │       ├───itsdangerous-1.1.0.dist-info
│   │   │       ├───jinja2
│   │   │       │   └───__pycache__
│   │   │       ├───Jinja2-2.11.3.dist-info
│   │   │       ├───markupsafe
│   │   │       │   └───__pycache__
│   │   │       ├───MarkupSafe-1.1.1.dist-info
│   │   │       ├───pip
│   │   │       │   ├───_internal
│   │   │       │   │   ├───cli
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───commands
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───distributions
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───index
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───models
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───network
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───operations
│   │   │       │   │   │   ├───build
│   │   │       │   │   │   │   └───__pycache__
│   │   │       │   │   │   ├───install
│   │   │       │   │   │   │   └───__pycache__
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───req
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───resolution
│   │   │       │   │   │   ├───legacy
│   │   │       │   │   │   │   └───__pycache__
│   │   │       │   │   │   ├───resolvelib
│   │   │       │   │   │   │   └───__pycache__
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───utils
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───vcs
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───_vendor
│   │   │       │   │   ├───cachecontrol
│   │   │       │   │   │   ├───caches
│   │   │       │   │   │   │   └───__pycache__
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───certifi
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───chardet
│   │   │       │   │   │   ├───cli
│   │   │       │   │   │   │   └───__pycache__
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───colorama
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───distlib
│   │   │       │   │   │   ├───_backport
│   │   │       │   │   │   │   └───__pycache__
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───html5lib
│   │   │       │   │   │   ├───filters
│   │   │       │   │   │   │   └───__pycache__
│   │   │       │   │   │   ├───treeadapters
│   │   │       │   │   │   │   └───__pycache__
│   │   │       │   │   │   ├───treebuilders
│   │   │       │   │   │   │   └───__pycache__
│   │   │       │   │   │   ├───treewalkers
│   │   │       │   │   │   │   └───__pycache__
│   │   │       │   │   │   ├───_trie
│   │   │       │   │   │   │   └───__pycache__
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───idna
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───msgpack
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───packaging
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───pep517
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───pkg_resources
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───progress
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───requests
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───resolvelib
│   │   │       │   │   │   ├───compat
│   │   │       │   │   │   │   └───__pycache__
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───toml
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───urllib3
│   │   │       │   │   │   ├───contrib
│   │   │       │   │   │   │   ├───_securetransport
│   │   │       │   │   │   │   │   └───__pycache__
│   │   │       │   │   │   │   └───__pycache__
│   │   │       │   │   │   ├───packages
│   │   │       │   │   │   │   ├───backports
│   │   │       │   │   │   │   │   └───__pycache__
│   │   │       │   │   │   │   ├───ssl_match_hostname
│   │   │       │   │   │   │   │   └───__pycache__
│   │   │       │   │   │   │   └───__pycache__
│   │   │       │   │   │   ├───util
│   │   │       │   │   │   │   └───__pycache__
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───webencodings
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   └───__pycache__
│   │   │       │   └───__pycache__
│   │   │       ├───pip-20.2.3.dist-info
│   │   │       ├───pkg_resources
│   │   │       │   ├───extern
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───_vendor
│   │   │       │   │   ├───packaging
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   └───__pycache__
│   │   │       │   └───__pycache__
│   │   │       ├───pytz
│   │   │       │   ├───zoneinfo
│   │   │       │   │   ├───Africa
│   │   │       │   │   ├───America
│   │   │       │   │   │   ├───Argentina
│   │   │       │   │   │   ├───Indiana
│   │   │       │   │   │   ├───Kentucky
│   │   │       │   │   │   └───North_Dakota
│   │   │       │   │   ├───Antarctica
│   │   │       │   │   ├───Arctic
│   │   │       │   │   ├───Asia
│   │   │       │   │   ├───Atlantic
│   │   │       │   │   ├───Australia
│   │   │       │   │   ├───Brazil
│   │   │       │   │   ├───Canada
│   │   │       │   │   ├───Chile
│   │   │       │   │   ├───Etc
│   │   │       │   │   ├───Europe
│   │   │       │   │   ├───Indian
│   │   │       │   │   ├───Mexico
│   │   │       │   │   ├───Pacific
│   │   │       │   │   └───US
│   │   │       │   └───__pycache__
│   │   │       ├───pytz-2021.1.dist-info
│   │   │       ├───requests
│   │   │       │   └───__pycache__
│   │   │       ├───requests-2.25.1.dist-info
│   │   │       ├───setuptools
│   │   │       │   ├───command
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───extern
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───_distutils
│   │   │       │   │   ├───command
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───_vendor
│   │   │       │   │   ├───packaging
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   └───__pycache__
│   │   │       │   └───__pycache__
│   │   │       ├───setuptools-49.2.1.dist-info
│   │   │       ├───sqlalchemy
│   │   │       │   ├───connectors
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───databases
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───dialects
│   │   │       │   │   ├───firebird
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───mssql
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───mysql
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───oracle
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───postgresql
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───sqlite
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───sybase
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───engine
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───event
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───ext
│   │   │       │   │   ├───declarative
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───orm
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───pool
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───sql
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───testing
│   │   │       │   │   ├───plugin
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───suite
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───util
│   │   │       │   │   └───__pycache__
│   │   │       │   └───__pycache__
│   │   │       ├───SQLAlchemy-1.3.23.dist-info
│   │   │       ├───urllib3
│   │   │       │   ├───contrib
│   │   │       │   │   ├───_securetransport
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───packages
│   │   │       │   │   ├───backports
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───ssl_match_hostname
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───util
│   │   │       │   │   └───__pycache__
│   │   │       │   └───__pycache__
│   │   │       ├───urllib3-1.26.3.dist-info
│   │   │       ├───werkzeug
│   │   │       │   ├───debug
│   │   │       │   │   ├───shared
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───middleware
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───wrappers
│   │   │       │   │   └───__pycache__
│   │   │       │   └───__pycache__
│   │   │       ├───Werkzeug-1.0.1.dist-info
│   │   │       ├───wtforms
│   │   │       │   ├───csrf
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───ext
│   │   │       │   │   ├───appengine
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───csrf
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───dateutil
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───django
│   │   │       │   │   │   ├───templatetags
│   │   │       │   │   │   │   └───__pycache__
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───i18n
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   ├───sqlalchemy
│   │   │       │   │   │   └───__pycache__
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───fields
│   │   │       │   │   └───__pycache__
│   │   │       │   ├───locale
│   │   │       │   │   ├───ar
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───bg
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───ca
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───cs_CZ
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───cy
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───de
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───de_CH
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───el
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───en
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───es
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───et
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───fa
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───fi
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───fr
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───he
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───hu
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───it
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───ja
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───ko
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───nb
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───nl
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───pl
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───pt
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───ru
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───sk
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───sv
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───tr
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───uk
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   ├───zh
│   │   │       │   │   │   └───LC_MESSAGES
│   │   │       │   │   └───zh_TW
│   │   │       │   │       └───LC_MESSAGES
│   │   │       │   ├───widgets
│   │   │       │   │   └───__pycache__
│   │   │       │   └───__pycache__
│   │   │       ├───WTForms-2.3.3.dist-info
│   │   │       └───__pycache__
│   │   └───Scripts
│   └───__pycache__
└───__pycache__

提前感谢您的帮助!

PS:经过长时间的搜索和多次设置调整,解决方案是将名称 app.py 更改为 main.py 然后更改 procfile web: gunicorn main:app

我希望这对和我遇到同样问题的人有所帮助。

【问题讨论】:

  • 基于此,我猜您的 Procfile 不正确:ModuleNotFoundError: No module named 'app'。您可以通过heroku local 在本地运行吗?请edit您的问题向我们展示您的Procfile和项目目录结构。
  • 请也分享procfile
  • 感谢更新。不幸的是,您的目录树并没有它应有的帮助。请删除所有__pycache__ 目录,删除venv 目录,并在每个目录中添加文件。我们需要了解您的项目结构。

标签: python flask heroku gunicorn application-error


【解决方案1】:

这是您应该查看的错误:2021-03-27T17:31:11.587165+00:00 app[web.1]: ModuleNotFoundError: No module named 'app'

此错误的可能原因:

  1. Procfile 声明不好
# This is how it should be:

web: flask db upgrade; gunicorn tinker:app

Procfile 以进程名称开头(在本例中,它是一个 Web 应用程序,因此我们将使用 web)。在冒号之后,您需要定义所需的命令。最后,您需要声明您的服务器。

  1. 用于您的应用程序入口文件和 app 子文件夹的相似名称。这就是我的意思:
project_folder
     | ----------app.py # entry file
     | ----------config.py
     | ----------app/
                   | ---------- __init__.py
                   | ---------- routes.py
                   | ---------- templates/
                   | ---------- static/

从这个结构中可以看出,您的应用程序入口文件称为app.py。如果您使用不同的结构,则此文件是您运行代码的位置。请注意,此名称与 app 子文件夹相同。

所以,当您在Procfile 中声明您的Web 应用程序时,您应该首先将应用程序结构中的入口文件名重命名为其他名称,例如my_entry_file.py。然后添加到Procfile

web: flask db upgrade; gunicorn my_entry_file:app

【讨论】:

  • 请不要将flask db upgrade 放入您的web 进程中。没有理由在您的应用程序每次启动时都运行它,并将其放在这里不会为您提供任何保护,以防升级失败。 release process 会更合适。
  • @Chris 谢谢你的建议。我会考虑使用release,因为我一直使用flask db upgrade。我也很欣赏这个链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
  • 2014-02-27
  • 2020-05-12
相关资源
最近更新 更多