2014-11-14 1011 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我以前创建的固定它。

相关问题