我正在尝试将一个相当简单的Flask应用程序部署到Heroku的雪松堆栈中,但我一直看到以下错误:
2012-08-09T22:37:49+00:00 heroku[web.1]: State changed from crashed to starting
2012-08-09T22:37:52+00:00 heroku[web.1]: Starting process with command `gunicorn pytips.app:create_app() -b 0.0.0.0:42152 -w 3`
2012-08-09T22:37:53+00:00 app[web.1]: bash: -c: line 0: syntax error near unexpected token `('
2012-08-09T22:37:53+00:00 app[web.1]: bash: -c: line 0: `gunicorn pytips.app:create_app() -b 0.0.0.0:42152 -w 3'
我将此作为我的Procfile
:
web: gunicorn pytips.app:create_app() -b 0.0.0.0:$PORT -w 3
当我通过运行foreman start
在本地测试时,一切正常。如果foreman
在本地处理好的话,为什么Heroku会遇到问题?
更新:我还尝试使用heroku run
进行测试。这是产生的结果:
heroku run --app pytips gunicorn pytips.app:create_app() -b 0.0.0.0:$PORT -w 3
什么也没给我。
heroku run --app pytips 'gunicorn pytips.app:create_app() -b 0.0.0.0:$PORT -w 3'
给了我heroku:108: command not found: -b
。
答案 0 :(得分:1)
我目前的解决方案是:我从括号中删除,例如,
web: gunicorn pytips.app:create_app\(\) -b 0.0.0.0:$PORT -w 3
虽然这完全在我的本地盒子上爆炸,但它似乎只能在Heroku的系统上运行。我仍然希望Heroku的支持团队可以弄清楚它为什么在一个地方工作,而不是另一个地方。在那之前,我将使用未转义的版本在本地进行测试,然后在推送到Heroku之前将逃脱放回去。
答案 1 :(得分:1)
我在日志中没有任何内容得到相同的错误500。
原来Heroku不喜欢我当地的SQLite数据库。我能够设置免费的PostgreSQL数据库,错误就消失了。
我遵循了本教程。
http://blog.y3xz.com/blog/2012/08/16/flask-and-postgresql-on-heroku/
答案 2 :(得分:0)
所以首先是你的gunicorn
命令不正确。当你运行gunicorn时,你需要将它传递给你的app实例。例如,如果您的Flask应用程序是在pytips.py
文件中定义的,那么您可以通过执行:gunicorn pytips:app -b ...
来运行gunicorn。
如果你改变了,我猜它会很好用,因为你的其他东西看起来不错。