我有一个用于学习目的的系统,用于Flask-SQLAlchemy并部署在Heroku上(python / postgresql:
http://monkey-me.herokuapp.com/
https://github.com/coolcatDev/monkey-me
我的应用程序在本地工作正常,我通过14次成功通过测试对其功能和用例进行了单元测试。
当我部署一切似乎完美无缺。它已部署,我定义了环境变量APP_SETTINGS>>>> config.BaseConfig,我运行db_create.py脚本来初始化db。我创建了一些用户:
username-userpassword:
Alex-passwordAlex
Jack-passwordJack
Sara-passwordSara
但是缺少一件事......我从主导航栏转到用户页面,我收到一个5oo内部服务器错误说:
The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
app.py上的我的应用代码具有调试模式:
if __name__ == '__main__':
app.run(debug=True)
但不会显示更多错误。
请注意,如果我在heroku上访问系统并且我已注销,如果我转到用户,我应该重定向到登录页面,以便我已经调试了多远......
如果我将heroku上的环境变量LAUNCHY_DEBUG设置为true或false,一切都会变得疯狂并出现新问题...就像我无法删除用户一样,配置文件图像不会加载....
如果我从heroku中删除了LAUNCHY_DEBUG变量,则新问题(图片无法加载,无法删除用户..)会在用户页面的原始500错误中保留。
提前感谢您对调试的任何建议
答案 0 :(得分:5)
使用以下内容获取更多写在日志中的反馈:
import logging
app.logger.addHandler(logging.StreamHandler(sys.stdout))
app.logger.setLevel(logging.ERROR)
这揭示了问题:
ProgrammingError: (ProgrammingError) column "user_bf.id" must appear in the GROUP BY clause or be used in an aggregate function
修改查询:
userList = (
users.query
.add_column(db.func.count(friendships.user_id).label("total"))
.add_column(user_bf.id.label("best_friend"))
.add_column(user_bf.userName.label("best_friend_name"))
.outerjoin(friendships, users.id == friendships.user_id)
.outerjoin(user_bf, users.best_friend)
.group_by(users.id, user_bf.id)
.order_by(test)
.paginate(page, 6, False)
)
关于图像消失:
在dynos生命周期结束时,将删除在heroku上托管的文件系统上写入的任何文件。