Heroku应用程序在推动小改变后崩溃了。非常困惑

时间:2012-10-03 22:41:52

标签: python heroku flask

我正在使用Heroku与python和Flask。我的应用程序工作正常,直到我在我的python应用程序文件中更新了几行。该应用程序在本地运行正常,但我现在尝试访问我的应用程序时出现以下错误:

“应用程序出错,无法提供您的网页。请稍后再试。 如果您是应用程序所有者,请查看日志以获取详细信息。“

我的日志看起来像这样:

2012-10-03T17:40:26+00:00 heroku[web.1]: Process exited with status 1
2012-10-03T17:40:26+00:00 heroku[web.1]: State changed from starting to crashed
2012-10-03T17:51:25+00:00 heroku[web.1]: State changed from crashed to starting
2012-10-03T17:51:26+00:00 heroku[web.1]: Starting process with command `python presentation.py`
2012-10-03T17:51:26+00:00 app[web.1]: ImportError: No module named site

我也无法再通过heroku运行python:

Cinnas-MacBook-Pro:infinite-fortress-4866 cinna$ heroku run python
Running `python` attached to terminal... up, run.1
ImportError: No module named site

我接下来要做的就是检查我的环境变量:

Cinnas-MacBook-Pro:infinite-fortress-4866 cinna$ heroku config
=== infinite-fortress-4866 Config Vars
LANG:             en_US.UTF-8 
LD_LIBRARY_PATH:  /app/.heroku/vendor/lib
LIBRARY_PATH:     /app/.heroku/vendor/lib
PATH:             /app/.heroku/venv/bin:/bin:/usr/local/bin:/usr/bin
PYTHONHASHSEED:   random
PYTHONHOME:       /app/.heroku/venv/
PYTHONPATH:       /app/
PYTHONUNBUFFERED: true

但是,当我尝试查看库目录时,我会得到类似的结果:

Cinnas-MacBook-Pro:infinite-fortress-4866 cinna$ heroku run ls /app/.heroku/vendor/lib
Running `ls /app/.heroku/vendor/lib` attached to terminal... up, run.1
ls: cannot access /app/.heroku/vendor/lib: No such file or directory

我不知道此刻该在哪里继续。我想念我的应用程序,请帮忙!

其他信息:

当我在app.py代码中添加以下行时,问题全部开始了:

 @app.route('/my_fb_graph',methods=['GET','POST'])
 def my_fb_graph():
 return render_template('my_fb_graph.html')

当我推送代码时,应用程序不再有效。然后我删除了这些代码行,再次推送代码,仍然得到相同的错误。我做的下一件事是完全删除app.py文件并尝试一个仍然无效的小测试代码。

问题的根源似乎是错误:

 2012-10-03T17:51:26+00:00 app[web.1]: ImportError: No module named site

3 个答案:

答案 0 :(得分:6)

我能够解决问题,但仍然不知道为什么它首先发生了!

经过大量的实验,我最终在Heroku上设置了一个全新的应用程序。我检查了新应用中的环境变量,得到了以下结果:

 Cinnas-MacBook-Pro:thawing-temple-4323 cinna$ heroku config
 === thawing-temple-4323 Config Vars
 FACEBOOK_APP_ID:  ***
 FACEBOOK_SECRET:  ***
 PATH:             bin:/usr/local/bin:/usr/bin:/bin
 PYTHONUNBUFFERED: true

检查我的原始应用程序(已损坏的应用程序),我意识到在我的最后一次推送中以某种方式添加了新的环境变量,如我的日志所示:

 2012-10-04T04:20:04+00:00 heroku[api]: Add PYTHONUNBUFFERED, PYTHONPATH, PYTHONHOME, LANG, LD_LIBRARY_PATH, PATH, PYTHONHASHSEED, LIBRARY_PATH config by ***@***

并检查我的环境变量:

 Cinnas-MacBook-Pro:infinite-fortress-4866 cinna$ heroku config
 === infinite-fortress-4866 Config Vars
 LANG:             en_US.UTF-8 
 LD_LIBRARY_PATH:  /app/.heroku/vendor/lib
 LIBRARY_PATH:     /app/.heroku/vendor/lib
 PATH:             /app/.heroku/venv/bin:/bin:/usr/local/bin:/usr/bin   
 PYTHONHASHSEED:   random
 PYTHONHOME:       /app/.heroku/venv/
 PYTHONPATH:       /app/
 PYTHONUNBUFFERED: true

我使用以下命令删除了这些新变量:

 heroku config:remove PYTHONPATH PYTHONHOME LANG LD_LIBRARY_PATH PYTHONHASHSEED LIBRARY_PATH

我的应用程序又开始运行了。我一直在推动更多的代码,而且这个问题还没有再发生过。

我仍然很好奇为什么/如何在第一时间添加这些变量,因为我所做的就是做一个git push。

答案 1 :(得分:6)

我昨天(2012年12月6日)遇到了类似的问题。出乎意料的是,每次python调用都以'ImportError:No module named site'而死亡。 Heroku的支持今天又回到了我的身边,他们说它已经修复了,所以不需要以下的解决方法。我会留在这里,以防其他人诊断。

我检查了我的heroku配置变量,但没有设置PYTHON *变量。它们在shell级别被设置为env vars:

$ heroku run set | grep PYTHON
PYTHONHASHSEED=random
PYTHONHOME=/app/.heroku/venv/
PYTHONPATH=/app/
PYTHONUNBUFFERED=true 

/app/.heroku/venv是一个不存在的目录。如果我用config var覆盖PYTHONHOME,并指出我的virtualenv实际上在哪里,那一切都开始了:

$ heroku config:set PYTHONHOME=/app

/ app似乎是项目根目录的挂载点。深入了解Python buildpack的历史,看起来当我开始我的项目时,每个人都在项目根目录中创建了virtualenvs。现在,新项目在venv /子目录中创建了virtualenvs。支持表示他们正在逐步推出一个buildpack更改,我想对旧的做事方式的检查并没有为我提供支持。

这里是寻找buildpack内部的地方: https://github.com/heroku/heroku-buildpack-python/blob/master/bin/compile

答案 2 :(得分:1)

这也是我的意思。我不确定它何时开始。我不相信这是对我的任何改变的回应,我今天刚刚注意到site上的应用程序错误,并在日志中发现了这一点:

2012-12-12T16:02:06+00:00 heroku[web.1]: State changed from crashed to starting
2012-12-12T16:02:09+00:00 heroku[web.1]: Starting process with command `aspen --network_address=:40856 --www_root=doc/ --project_root=doc/.aspen`
2012-12-12T16:02:10+00:00 app[web.1]: ImportError: No module named site
2012-12-12T16:02:11+00:00 heroku[web.1]: Process exited with status 1
2012-12-12T16:02:11+00:00 heroku[web.1]: State changed from starting to crashed

我准备好了另一个版本,所以我像往常一样部署。在git push heroku之后,该网站会重新启动。我的heroku config没有上面列出的额外envvars:

$ heroku config
=== aspen-io Config Vars
ASPEN_IO_SHOW_GA: yes
PATH:             bin:/usr/local/bin:/usr/bin:/bin
PYTHONUNBUFFERED: true

更新: @kennethreitz pointed methis

  

无法导入模块网站

     

当配置的环境变量与之匹配时,会发生这种情况   已安装的Python的路径。当发生这种情况时,这是因为有人   清除应用程序的缓存而不了解上述含义。

     

要修复,请清除缓存并更新配置,或者   恢复预期的配置(首选)。