2012-10-03 10 views
5

我用Python和Flask使用Heroku。我的應用程序工作正常,直到我更新了我的python應用程序文件中的幾行。該應用程序運行正常在本地,但我現在有以下錯誤,當我嘗試訪問我的應用程序:。Heroku的應用程序在推小改後崩潰。非常困惑

「發生在應用程序中的錯誤,你的頁面無法送達,請在稍後重試 如果您是應用程序所有者,請查看日誌以瞭解詳細信息。「

我的日誌是這個樣子:

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 

但是,當我嘗試查看裏面的lib rary目錄,我得到這樣的東西:

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

你可以通過描述正是你所做的改變是 –

+0

,如果你開始改回它是否再次工作?如果是的話,您的更改可能會有錯誤... –

+0

感謝您的評論,我添加了一些更多信息。我不僅改變了它,我試圖完全刪除app.py並運行一個小測試代碼。 – Cinna

回答

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 

我的應用程序又開始工作了。我一直在推動更多的代碼,而這個問題並沒有再次發生。

我還是很好奇,爲什麼/如何將這些變量被擺在首位,因爲我所做的添加是做一個混帳推。

+0

感謝您的支持!旁邊的問題:你是如何得到你的日誌?我知道的唯一命令是'heroku logs',還有其他的嗎? –

+0

這也適用於我,所以謝謝你!我猜我的應用配置是相當古老的? –

6

昨天我遇到了一個非常類似的問題(2012年12月6日)。突然之間,每個python調用都因'ImportError:No module named site'而死亡。 Heroku的支持今天回覆給我,他們說它已經固定在他們的最後,所以下面的解決方法不應該被要求。如果它幫助別人診斷,我會在這裏留下。

我檢查了我的Heroku配置瓦爾雖然,有沒有設定PYTHON *變量。

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

/app/.heroku/venv是一個不存在的目錄:他們爲ENV在shell水平瓦爾雖然分別設置。如果我推翻PYTHONHOME與配置變種,並指出到我的virtualenv實際上是,這一切都開始工作了:

$ heroku config:set PYTHONHOME=/app 

/應用似乎是一個安裝點項目的根目錄。挖掘Python buildpack的歷史,看起來當我開始我的項目時,每個人都在項目根目錄中創建了他們的virtualenvs。現在新項目將venualenvs放置在venv /子目錄中。支持者表示,他們正在逐步推出buildpack的改變,而且我認爲檢查舊的做事方式並沒有爲我提供幫助。

這裏的地方去尋找buildpack內部: https://github.com/heroku/heroku-buildpack-python/blob/master/bin/compile

+0

乾杯,爲我工作! –

+0

今天有同樣的問題,謝謝。 –

+0

試過這個...不起作用。我正在使用virtualenvwrapper ...會影響它嗎? – zakdances

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

Cannot import module site

This occurs when the configured environment variables don't match the paths of the installed Python. When this occurs, it is because someone purged an app's cache without understanding the above implications.

To fix, either purge the cache and update the configuration, or restore the expected configurations (preferred).