我正在使用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
答案 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 me至this:
无法导入模块网站
当配置的环境变量与之匹配时,会发生这种情况 已安装的Python的路径。当发生这种情况时,这是因为有人 清除应用程序的缓存而不了解上述含义。
要修复,请清除缓存并更新配置,或者 恢复预期的配置(首选)。