我正在开发在Azure上部署的Flask / MongoDB应用程序。在本地,我正在创建模型并测试数据库连接。我正在使用Flask-MongoEngine来管理数据库连接。这是一个代码示例,可以在localhost
上完美运行,但是在Azure上调用其部署版本时失败。
# On models.py
from flask_mongoengine import MongoClient
db = MongoClient()
class User(db.Document):
name = db.StringField(max_length=50)
token = db.StringField(max_length=50)
email = db.EmailField()
后来,从views.py
起,我这样称呼我的User类:
import models as mdl
@app.route('/test')
def test():
"""For testing purposes"""
user = mdl.User(name='Matias')
user.save()
users = mdl.User.objects
return jsonify(users)
按预期在本地输出。但是,在Azure上,出现以下错误 (将仅显示回溯的最后和相关部分):
File ".\app\views.py", line 53, in test
user = mdl.User(name='Matias')
File "D:\home\python364x86\lib\site-packages\mongoengine\base\document.py",
line 43, in _init_
self._initialised = False
File "D:\home\python364x86\lib\site-packages\mongoengine\base\document.py",
line 168, in _setattr_
self._is_document and
AttributeError: 'User' object has no attribute '_is_document'
通过pip freeze
,我检查了两种环境中的mongoengine
,pymongo
和flask_mongoengine
是否使用相同的版本。我似乎找不到其他遇到相同问题的人。该应用程序作为Webapp部署在Azure云中的Windows计算机上。
感谢您的帮助。
PS:详细信息
回顾mongoengine
代码,我发现_is_document
属性在类Document
(DocumentMetaclass
和TopLevelDocumentMetaclass
)的元类中设置。我尝试将属性设置为True
内的User
,并显示以下错误:
AttributeError: 'User' object has no attribute '_meta'
,
这也是在这些元类中定义的属性。元类代码以某种方式未运行?也许Azure环境与此有关?