我在本地机器上用 Python 制作了我的第一个 Web 应用程序,该应用程序链接到 postgres 数据库。在我的本地机器上,Web 应用程序可以运行,所以我的下一步是将应用程序放到 Internet 上。
这是我开始使用 Heroku 的地方,在学习了一些教程之后,我将我的 Web 应用程序推送到 Heroku 上并推送了我的数据库的副本。我修改了我的代码,现在它指向 Heroku 上的数据库,而不是我的本地计算机。
但是,在我的 procfile 中尝试了许多不同的变体之后,我的网站上仍然出现应用程序错误。运行:heroku logs --tail,我得到以下错误日志...
2016-03-06T07:24:19.684867+00:00 heroku[web.1]: Starting process with command `python bin/app.py /usr/local/bin:/usr/bin:/bin`
2016-03-06T07:24:22.761469+00:00 app[web.1]: ('test@gmail.com ', '$1$Kp635oRe$xuPE1/iVdvJcAUzS5LIRF. ', 36, 'test ')
2016-03-06T07:24:23.391570+00:00 app[web.1]: (5, datetime.datetime(2015, 8, 28, 21, 0), datetime.datetime(2015, 8, 20, 8, 0), datetime.datetime(2015, 8, 25, 17, 0), 'To be decided ', None, 'To be decided ', None, 'Final ')
2016-03-06T07:24:23.391582+00:00 app[web.1]: 2015-08-28 21:00:00
2016-03-06T07:24:23.391681+00:00 app[web.1]: 5
2016-03-06T07:24:24.047123+00:00 app[web.1]: (5, datetime.datetime(2015, 8, 28, 21, 0), datetime.datetime(2015, 8, 20, 8, 0), datetime.datetime(2015, 8, 25, 17, 0), 'To be decided ', None, 'To be decided ', None, 'Final ')
2016-03-06T07:24:24.047165+00:00 app[web.1]: 5
2016-03-06T07:24:24.047135+00:00 app[web.1]: 2015-08-28 21:00:00
2016-03-06T07:24:24.705463+00:00 app[web.1]: (5, datetime.datetime(2015, 8, 28, 21, 0), datetime.datetime(2015, 8, 20, 8, 0), datetime.datetime(2015, 8, 25, 17, 0), 'To be decided ', None, 'To be decided ', None, 'Final ')
2016-03-06T07:24:24.705478+00:00 app[web.1]: 2015-08-28 21:00:00
2016-03-06T07:24:29.129053+00:00 app[web.1]: File "bin/app.py", line 195, in <module>
2016-03-06T07:24:29.129044+00:00 app[web.1]: Traceback (most recent call last):
2016-03-06T07:24:29.129139+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/web/application.py", line 313, in run
2016-03-06T07:24:29.129112+00:00 app[web.1]: app.run()
2016-03-06T07:24:29.129252+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/web/wsgi.py", line 54, in runwsgi
2016-03-06T07:24:29.129294+00:00 app[web.1]: return httpserver.runsimple(func, validip(listget(sys.argv, 1, '')))
2016-03-06T07:24:29.129248+00:00 app[web.1]: return wsgi.runwsgi(self.wsgifunc(*middleware))
2016-03-06T07:24:29.129344+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/web/net.py", line 76, in validip
2016-03-06T07:24:29.129375+00:00 app[web.1]: port = int(port)
2016-03-06T07:24:29.129400+00:00 app[web.1]: ValueError: invalid literal for int() with base 10: '/usr/local/bin:/usr/bin:/bin'
2016-03-06T07:24:29.775276+00:00 heroku[web.1]: Process exited with status 1
2016-03-06T07:24:29.782331+00:00 heroku[web.1]: State changed from starting to crashed
2016-03-06T11:27:22.484435+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=limeuro2016.herokuapp.com request_id=0567035b-6419-4c45-abaa-aea7d0be7206 fwd="90.210.194.244" dyno= connect= service= status=503 bytes=
2016-03-06T11:27:22.976331+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=limeuro2016.herokuapp.com request_id=aa3d55d0-7015-4949-8b86-49f6c1dcc68d fwd="90.210.194.244" dyno= connect= service= status=503 bytes=
显然我有很多愚蠢的打印语句在运行,我需要整理一下,但这不应该是这个错误的原因。我认为这与我的 procfile 有关,因为 'port = int(port)' 但我是不是找错地方了?
我的 procfile 读取...
web: python bin/app.py $PATH
port = int(os.environ.get('PORT', 8080))
app.run(host='0.0.0.0', port=port)
我将不胜感激,因为过去两周我一直在尝试自己研究解决方案,但遇到了困难!为什么它在我的本地机器上工作而不是 Heroku!?!
最佳答案
根据报错信息,我猜测是环境变量PORT
设置为'/usr/local/bin:/usr/bin:/bin'
.
使用命令 heroku run printenv
列出您的环境变量。
此外,我相信您的 procfile
应该以 web: python bin/app.py ${PORT}
开头,而不是 PATH
可能是什么将 PORT
设置为路径。
关于python - Web 应用程序可在本地计算机上运行,但不能在 Heroku 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35826487/