Web 应用程序可在本地计算机上运行,​​但不能在 Heroku 上运行

Web Application works on local machine but does not work on Heroku

我在 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                                    ', '$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=

显然我有很多愚蠢的打印语句 运行 需要整理,但这不应该是导致此错误的原因。由于 'port = int(port)',我认为这与我的 procfile 有关,但我是不是找错地方了?

我的 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 设置为路径的原因。