在本地计算机上,使用本地MySQL数据库,一切正常。这是我的应用__init__.py
文件:
#rootfolder/__init__.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os
ON_HEROKU = 'ON_HEROKU' in os.environ
if ON_HEROKU:
DB_URL = os.environ.get('CLEARDB_DATABASE_URL')
else:
from dotenv import load_dotenv
load_dotenv()
DB_URL = os.getenv('MYSQL_URL')
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL
app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
from projectname.Controller.root import root
from projectname.Controller.user_controller import user_routes # This imports Model too
app.register_blueprint(root)
app.register_blueprint(user_routes)
db.create_all()
user_routes
蓝图也导入Model类。我在本地数据库中看到了创建的表,因此逻辑看起来还不错。
在'HELLO'
条件内打印出DB_URL
和if ON_HEROKU:
,以检查云中的网址:
if ON_HEROKU:
DB_URL = os.environ.get('CLEARDB_DATABASE_URL')
print('HELLO')
print(DB_URL)
我可以看到他们正在查看heroku日志:
.
.
app[web.1]: HELLO
app[web.1]: mysql://*********:*******@us-cdbr-iron-east-05.cleardb.net/heroku_c52490fb3111cda?reconnect=true
.
.
实际上,我在heroku上安装了ClearDB,该URL作为配置变量:
我还设法使用HeidiSQL连接到了这个heroku数据库,heroku的URL创建了我。所以一切都必须准备就绪。
注释了db.create_all()
函数,已部署的heroku应用程序未引发任何错误,我在根路由后看到基本json消息。但是,再加上db.create_all()
会出现以下日志错误:
app[web.1]: db.create_all()
app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py", line 1033, in create_all
.
.
.
app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 118, in dbapi
app[web.1]: return __import__("MySQLdb")
app[web.1]: ModuleNotFoundError: No module named 'MySQLdb'
我在本地也遇到了类似的错误,因此我尝试用mysql+pymysql://
驱动程序名修改heroku给我的URL并将PyMySQL==0.9.3
添加到我的requirements.txt
(我不确定heroku是否检查)。
现在的错误还不够:
app[web.1]: db.create_all()
app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py", line 1033, in create_all
.
.
.
app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/pymysql/__init__.py", line 94, in Connect
app[web.1]: return Connection(*args, **kwargs)
app[web.1]: TypeError: __init__() got an unexpected keyword argument 'reconnect'
我的Procfile
如下所示:web gunicorn run:app
,因为run.py
启动了整个应用程序。
我在这里想念什么?