2015-02-07 232 views
0

我建立了学习的目的与瓶-SQLAlchemy的,并部署在Heroku(蟒蛇/ PostgreSQL的一个小系统:500内部服务器错误的Heroku

http://monkey-me.herokuapp.com/

https://github.com/coolcatDev/monkey-me

我的应用程序工作正常,局部和我已经通过14个测试成功通过了单元测试其功能和用例。

当我部署一切似乎完美。它的部署,我定义的环境变量APP_SETTING S >>> config.BaseConfig,我运行db_create.py脚本来初始化数据库。我创建一些用户:

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为真或假,一切都会变得疯狂并出现新问题...就像我无法删除用户,配置文件图像不会加载....

如果我删除LAUNCHY_DEBUG var从heroku新的问题(图像不会加载,不能删除用户..)持续在用户页面的原始500错误。

预先感谢与调试

+0

您正在使用gunicorn。这意味着您不要在调试模式下启动开发服务器。这很好。但这意味着您需要检查日志以查看错误是什么。 – dirn 2015-02-07 14:40:08

+0

@dirn感谢您的评论。我对heroku很陌生,所以我非常有限。我用“heroku logs -n 1500”检查日志。与显示错误的用户页面匹配请求的日志仅显示: – 2015-02-07 15:06:56

+0

2015-02-07T14:01:05.297748 + 00:00 heroku [router]:at = info method = GET path =“/ users”host = monkey -me.herokuapp.com request_id = 2ff807e8-7f4a-4427-ba26-6301fb541a73 fwd =“31.46.53.207”dyno = web.1 connect = 1ms service = 44ms status = 500 bytes = 456 – 2015-02-07 15:07:17

回答

4

使用以下方法来获得更多的反馈写在日志中的任何建议:

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) 
     ) 

关于图像消失:

任何写在托管在heroku上的文件系统上的文件都将在dynos生命周期结束时被删除。