所以我想知道只在生产中发生的服务器错误(当应用程序在生产和开发之间相同时)。
因此,使用Flask-Admin,我显示了一个基本的CRUD界面,模型视图主要依赖于模型的__repr__方法在列表视图中提供可读的字符串。在生产中(新的应用程序,与dev相同的数据),当__repr__方法无意中做了一些愚蠢的事情时,我收到服务器错误。在开发中,忽略或忽略相同的愚蠢行为。
例如:
MODEL:
class Author(db.Model):
first_name = db.Column(db.String(50), nullable=True)
middle_name = db.Column(db.String(50), nullable=True)
last_name = db.Column(db.String(50), nullable=True)
# ...
def __repr__():
return '{}'.format(' '.join([self.first_name, self.middle_name, self.last_name])) # EDITED: Checked repository and I did have the arguments correct -- just wrote this off the top of my head.
__ repr __()在这种情况下,当名字,中间名或姓氏为NULL时,仅在服务器上(在apache上为wsgi)导致错误。它尝试使用join连接NULL和String,从而导致某些"期望字符串的变体,得到NULL"被提升。
但是,在开发服务器上,我从未看到这些错误(也没有任何警告)。
我已经改变了这个repr方法,以便在连接之前检查名字,中间名和姓氏,但我不知道为什么错误发生在生产(wsgi应用程序)中而不是在开发中(flask dev服务器)或者cherrypi服务器)。
那么,有什么想法吗?这两种情况有什么不同?
答案 0 :(得分:1)
我有类似的问题。我通过将NULL转换为None来奇怪地解决了它。
例如,我创建了一个在所有视图中调用的函数,并将所有NULL值转换为None类型。无论是在开发还是在生产中,它都能完美运行。
我还在开发中使用了flask dev服务器,在生产中使用了wsgi和apache2 ......
为什么它有效我无法告诉你!