2014-11-14 1012 views
0

我試圖在Elastic Beanstalk上部署hello-world類型的應用程序。幾乎所有的東西似乎都可以工作,軟件包被安裝等等,直到mod_wsgi嘗試從wsgi.py中檢索「application」對象。在這一點上,下面將出現在日誌中(一旦在日誌爲每個unsuccessfuly HTTP請求):ImportError:無法導入名稱NullHandler

mod_wsgi (pid=6114): Target WSGI script '/opt/python/current/app/myapp/wsgi.py' cannot be loaded as Python module. 
mod_wsgi (pid=6114): Exception occurred processing WSGI script '/opt/python/current/app/myapp/wsgi.py'. 
Traceback (most recent call last): 
    File "/opt/python/current/app/caserails/wsgi.py", line 20, in <module> 
    application = get_wsgi_application() 
    File "/opt/python/run/venv/lib/python2.7/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application 
    django.setup() 
    File "/opt/python/run/venv/lib/python2.7/site-packages/django/__init__.py", line 18, in setup 
    from django.utils.log import configure_logging 
    File "/opt/python/run/venv/lib/python2.7/site-packages/django/utils/log.py", line 16, in <module> 
    from logging import NullHandler # NOQA 
ImportError: cannot import name NullHandler 

Link to concurrent AWS Forum Post.

回答

1

經過多次試驗和錯誤,(即時)問題通過從requirements.txt中刪除python logging並重建環境來解決。

我還沒有完全理解爲什麼這是一個問題。在我的本地機器上,我能夠安裝日誌記錄並無誤地運行Django。我懷疑vikramls指出,在mod_wsgi,mod_wsgi執行的baselineenv以及我的應用程序運行的virtualenv之間的交集中發生了一些奇怪的事情。

但是,至少現在,我通過在Elastic Beanstalk上部署Django 1.7時在requirements.txt中不包括「logging」來解決此錯誤。

1

NullHandler在2.7版本中引入的。你確定你在服務器上運行2.7嗎?

+0

當然是有名的遺言。 。 。但是,我確實把一些syslog語句放到了我的wsgi.py文件中去試試看(例如syslog.syslog('sys.executable:{}'。format(sys.executable)); ),當我運行它返回的python(例如-V)它說我的python可執行文件是2.7.5。 – Erik 2014-11-15 04:36:16

+1

爲什麼你的回溯具有'/ opt/python/current/...'路徑和'/ opt/python/run/venv/...'?某種類型的virtualenv配置錯誤? – vikramls 2014-11-15 06:16:56

+0

我*認爲所有不同的python路徑都是AWS的EB環境設置virtualenvs在mod_wsgi下運行的工件。 [這是Google的一些文檔。](https://code.google.com/p/modwsgi/wiki/VirtualEnvironments)。有三種潛在的代碼來源。 。 。 AWS Elastic Beanstalk基線環境(不應直接在此處訪問,而應該是運行mod_wsgi解釋器的「環境」),虛擬環境(正在運行中)以及我的應用程序(它處於當前狀態) – Erik 2014-11-16 19:45:30

0

我有類似的問題,在我的情況下,問題是對於一些無關的項目,我在home文件夾中創建了logging.py文件,當我在家中運行某些東西時,它導入了這個文件而不是實際的模塊。

您可以檢查哪些文件被導入這樣的:

import logging 
print(logging.__file__) 

我刪除logging.py我以前創建的固定它。

相關問題