部署Django网站后使用apache和mod_wsgi出现Socket错误?
我网站上有一个后台功能,它会调用 urllib.urlopen(url)
来从指定的地址获取数据。部署后,其他功能都正常工作,只有这个功能出问题了。调用这个功能时出现了 [Errno socket error] [Errno -2] Name or service not known
的错误。看起来它找不到主机。
但是如果我用 python manage.py runserver
来运行网站,这个功能就能正常工作。
我在想,可能是Apache有问题,但我找不到具体原因。谢谢你的帮助。
这是这个功能的代码:
WORD_URL = 'http://dict.cn/ws.php?utf8=true&q=%s'
def get_word(word):
url = WORD_URL % word
dom = minidom.parse(urllib.urlopen(url))
try:
pron = dom.getElementsByTagName('pron')[0].firstChild.data
definition = dom.getElementsByTagName('def')[0].firstChild.data
except IndexError:
pron = ''
definition = ''
return {
'word':word,
'pron':pron,
'definition':definition
}
这是错误追踪信息:
Traceback:
File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/home/jxq/djcode/wormo/core/views.py" in added
31. xml_word = get_word(new_word)
File "/home/jxq/djcode/wormo/core/get_word.py" in get_word
8. dom = minidom.parse(urllib.urlopen(url))
File "/usr/lib/python2.7/urllib.py" in urlopen
84. return opener.open(url)
File "/usr/lib/python2.7/urllib.py" in open
205. return getattr(self, name)(url)
File "/usr/lib/python2.7/urllib.py" in open_http
342. h.endheaders(data)
File "/usr/lib/python2.7/httplib.py" in endheaders
937. self._send_output(message_body)
File "/usr/lib/python2.7/httplib.py" in _send_output
797. self.send(msg)
File "/usr/lib/python2.7/httplib.py" in send
759. self.connect()
File "/usr/lib/python2.7/httplib.py" in connect
740. self.timeout, self.source_address)
File "/usr/lib/python2.7/socket.py" in create_connection
553. for res in getaddrinfo(host, port, 0, SOCK_STREAM):
Exception Type: IOError at /wormo/added/
Exception Value: [Errno socket error] [Errno -2] Name or service not known
httpd.conf 配置文件:
WSGIScriptAlias / /home/jxq/djcode/wormo/apache/django.wsgi
<Directory /home/jxq/djcode/wormo/apache>
Order allow,deny
Allow from all
</Directory>
Alias /media/ /home/jxq/djcode/wormo/media/
<Directory /home/jxq/djcode/wormo>
Order deny,allow
Allow from all
</Directory>
我电脑上同时安装了Python 3和Python 2.7,这会造成问题吗?
1 个回答
0
这可能是权限问题,或者是你使用的Apache环境出了什么问题。你可以试着用一个简单的WSGI脚本作为基础,来测试一下获取网址的功能:
import sys
import urllib
def application(environ, start_response):
page_text = urllib.urlopen("http://www.google.com/").read()
start_response('200 OK', [
('Content-Type', 'text/html'),
('Content-Length', str(len(page_text))),
])
yield page_text