繁体   English   中英

Flask ImportError: cannot import name 'app' on heroku

[英]Flask ImportError: cannot import name 'app' on heroku

我创建了一个部署在 Heroku 上的 flask+react 应用程序,在我尝试添加数据库并尝试解决循环导入问题之前一切正常。 现在,我的结构如下:

api/__init__.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from api.config import Config

app = Flask(__name__, static_folder="../build", static_url_path="/")
app.config.from_object(Config)
db = SQLAlchemy(app)
migrate = Migrate(app, db)

import api.models

Procfile

web: flask db upgrade; gunicorn --pythonpath api api:app

还有我的主文件api/api.py

from flask import Flask
from api import app, db
from api.models import Scab

@app.route('/api/home')
def home():
   pass

# More routes

这是我的api/.flaskenv文件

FLASK_APP=api.py
FLASK_ENV=development

这一切都在本地运行良好,但是当我在 Heroku 上部署它时,我收到 ImportError 和另一个错误:没有这样的命令“db”。 以下是日志:

2021-04-02T00:20:18.544760+00:00 app[web.1]: Error: No such command 'db'.
2021-04-02T00:20:19.505547+00:00 app[web.1]: [2021-04-02 00:20:19 +0000] [9] [INFO] Starting gunicorn 20.0.4
2021-04-02T00:20:19.506386+00:00 app[web.1]: [2021-04-02 00:20:19 +0000] [9] [INFO] Listening at: http://0.0.0.0:10654 (9)
2021-04-02T00:20:19.506514+00:00 app[web.1]: [2021-04-02 00:20:19 +0000] [9] [INFO] Using worker: sync
2021-04-02T00:20:19.586590+00:00 app[web.1]: [2021-04-02 00:20:19 +0000] [12] [INFO] Booting worker with pid: 12
2021-04-02T00:20:19.614419+00:00 app[web.1]: [2021-04-02 00:20:19 +0000] [13] [INFO] Booting worker with pid: 13
2021-04-02T00:20:19.690243+00:00 heroku[web.1]: State changed from starting to up
2021-04-02T00:20:20.419746+00:00 app[web.1]: [2021-04-02 00:20:20 +0000] [13] [ERROR] Exception in worker process
2021-04-02T00:20:20.419759+00:00 app[web.1]: Traceback (most recent call last):
2021-04-02T00:20:20.419760+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
2021-04-02T00:20:20.419761+00:00 app[web.1]: worker.init_process()
2021-04-02T00:20:20.419762+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 119, in init_process
2021-04-02T00:20:20.419762+00:00 app[web.1]: self.load_wsgi()
2021-04-02T00:20:20.419762+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 144, in load_wsgi
2021-04-02T00:20:20.419763+00:00 app[web.1]: self.wsgi = self.app.wsgi()
2021-04-02T00:20:20.419764+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
2021-04-02T00:20:20.419764+00:00 app[web.1]: self.callable = self.load()
2021-04-02T00:20:20.419765+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 49, in load
2021-04-02T00:20:20.419765+00:00 app[web.1]: return self.load_wsgiapp()
2021-04-02T00:20:20.419766+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp
2021-04-02T00:20:20.419766+00:00 app[web.1]: return util.import_app(self.app_uri)
2021-04-02T00:20:20.419767+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/util.py", line 358, in import_app
2021-04-02T00:20:20.419767+00:00 app[web.1]: mod = importlib.import_module(module)
2021-04-02T00:20:20.419767+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/importlib/__init__.py", line 126, in import_module
2021-04-02T00:20:20.419769+00:00 app[web.1]: return _bootstrap._gcd_import(name[level:], package, level)
2021-04-02T00:20:20.419769+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 994, in _gcd_import
2021-04-02T00:20:20.419769+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 971, in _find_and_load
2021-04-02T00:20:20.419770+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
2021-04-02T00:20:20.419770+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
2021-04-02T00:20:20.419771+00:00 app[web.1]: File "<frozen importlib._bootstrap_external>", line 678, in exec_module
2021-04-02T00:20:20.419771+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
2021-04-02T00:20:20.419772+00:00 app[web.1]: File "/app/api/api.py", line 3, in <module>
2021-04-02T00:20:20.419772+00:00 app[web.1]: from api import app, db
2021-04-02T00:20:20.421118+00:00 app[web.1]: ImportError: cannot import name 'app'
2021-04-02T00:20:20.423394+00:00 app[web.1]: [2021-04-02 00:20:20 +0000] [13] [INFO] Worker exiting (pid: 13)
2021-04-02T00:20:20.626024+00:00 app[web.1]: [2021-04-02 00:20:20 +0000] [12] [ERROR] Exception in worker process
2021-04-02T00:20:20.626026+00:00 app[web.1]: Traceback (most recent call last):
2021-04-02T00:20:20.626027+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
2021-04-02T00:20:20.626028+00:00 app[web.1]: worker.init_process()
2021-04-02T00:20:20.626028+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 119, in init_process
2021-04-02T00:20:20.626029+00:00 app[web.1]: self.load_wsgi()
2021-04-02T00:20:20.626029+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 144, in load_wsgi
2021-04-02T00:20:20.626029+00:00 app[web.1]: self.wsgi = self.app.wsgi()
2021-04-02T00:20:20.626030+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
2021-04-02T00:20:20.626030+00:00 app[web.1]: self.callable = self.load()
2021-04-02T00:20:20.626036+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 49, in load
2021-04-02T00:20:20.626036+00:00 app[web.1]: return self.load_wsgiapp()
2021-04-02T00:20:20.626036+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp
2021-04-02T00:20:20.626037+00:00 app[web.1]: return util.import_app(self.app_uri)
2021-04-02T00:20:20.626037+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/util.py", line 358, in import_app
2021-04-02T00:20:20.626038+00:00 app[web.1]: mod = importlib.import_module(module)
2021-04-02T00:20:20.626038+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/importlib/__init__.py", line 126, in import_module
2021-04-02T00:20:20.626038+00:00 app[web.1]: return _bootstrap._gcd_import(name[level:], package, level)
2021-04-02T00:20:20.626039+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 994, in _gcd_import
2021-04-02T00:20:20.626039+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 971, in _find_and_load
2021-04-02T00:20:20.626040+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
2021-04-02T00:20:20.626040+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
2021-04-02T00:20:20.626041+00:00 app[web.1]: File "<frozen importlib._bootstrap_external>", line 678, in exec_module
2021-04-02T00:20:20.626041+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
2021-04-02T00:20:20.626041+00:00 app[web.1]: File "/app/api/api.py", line 3, in <module>
2021-04-02T00:20:20.626042+00:00 app[web.1]: from api import app, db
2021-04-02T00:20:20.630514+00:00 app[web.1]: ImportError: cannot import name 'app'
2021-04-02T00:20:20.631639+00:00 app[web.1]: [2021-04-02 00:20:20 +0000] [12] [INFO] Worker exiting (pid: 12)
2021-04-02T00:20:20.753083+00:00 app[web.1]: Traceback (most recent call last):
2021-04-02T00:20:20.753644+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 209, in run
2021-04-02T00:20:20.754182+00:00 app[web.1]: self.sleep()
2021-04-02T00:20:20.754224+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 357, in sleep
2021-04-02T00:20:20.754611+00:00 app[web.1]: ready = select.select([self.PIPE[0]], [], [], 1.0)
2021-04-02T00:20:20.754651+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 242, in handle_chld
2021-04-02T00:20:20.754958+00:00 app[web.1]: self.reap_workers()
2021-04-02T00:20:20.755004+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 525, in reap_workers
2021-04-02T00:20:20.755439+00:00 app[web.1]: raise HaltServer(reason, self.WORKER_BOOT_ERROR)
2021-04-02T00:20:20.761100+00:00 app[web.1]: gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>
2021-04-02T00:20:20.761142+00:00 app[web.1]:
2021-04-02T00:20:20.761143+00:00 app[web.1]: During handling of the above exception, another exception occurred:
2021-04-02T00:20:20.761143+00:00 app[web.1]:
2021-04-02T00:20:20.761184+00:00 app[web.1]: Traceback (most recent call last):
2021-04-02T00:20:20.761230+00:00 app[web.1]: File "/app/.heroku/python/bin/gunicorn", line 8, in <module>
2021-04-02T00:20:20.761539+00:00 app[web.1]: sys.exit(run())
2021-04-02T00:20:20.761582+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 58, in run
2021-04-02T00:20:20.761804+00:00 app[web.1]: WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
2021-04-02T00:20:20.761843+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 228, in run
2021-04-02T00:20:20.762169+00:00 app[web.1]: super().run()
2021-04-02T00:20:20.762206+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 72, in run
2021-04-02T00:20:20.762433+00:00 app[web.1]: Arbiter(self).run()
2021-04-02T00:20:20.762513+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 229, in run
2021-04-02T00:20:20.762748+00:00 app[web.1]: self.halt(reason=inst.reason, exit_status=inst.exit_status)
2021-04-02T00:20:20.762774+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 342, in halt
2021-04-02T00:20:20.763096+00:00 app[web.1]: self.stop()
2021-04-02T00:20:20.763137+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 393, in stop
2021-04-02T00:20:20.763542+00:00 app[web.1]: time.sleep(0.1)
2021-04-02T00:20:20.763584+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 242, in handle_chld
2021-04-02T00:20:20.763840+00:00 app[web.1]: self.reap_workers()
2021-04-02T00:20:20.763866+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 525, in reap_workers
2021-04-02T00:20:20.764203+00:00 app[web.1]: raise HaltServer(reason, self.WORKER_BOOT_ERROR)
2021-04-02T00:20:20.764246+00:00 app[web.1]: gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>
2021-04-02T00:20:20.900697+00:00 heroku[web.1]: Process exited with status 1
2021-04-02T00:20:20.968554+00:00 heroku[web.1]: State changed from up to crashed
2021-04-02T00:20:21.743210+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=orchardwatch.herokuapp.com request_id=3efcde74-5cf4-4496-a6ec-755f42350faf fwd="24.62.206.244" dyno= connect= service= status=503 bytes= protocol=https
2021-04-02T00:20:27.035992+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=orchardwatch.herokuapp.com request_id=9dc2e0e3-8a3a-4b07-92ee-b81e9e6fc9ec fwd="24.62.206.244" dyno=web.1 connect=5001ms service= status=503 bytes= protocol=https
2021-04-02T00:33:16.208921+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=orchardwatch.herokuapp.com request_id=7c68f45f-e287-4395-a7d2-75eec7177f9f fwd="54.162.81.130" dyno= connect= service= status=503 bytes= protocol=http

而不是from api import app, db ,您可能只想:

import app

默认情况下,这还将在导入的 scope 中公开该模块( appdb )中的变量。

from location import routes_file

这在你的init .py 文件的底部

用正确的名称替换伪名称


编辑1:

在 your.flaskenv 文件中,将 FLASK_APP 变量设置为您的 init 文件。例如,我在 heroku 上的 flask 应用程序在 my.flaskenv 文件中有以下内容。

FLASK_APP=__init__.py

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM