2011-05-30 70 views
0

有一个在我的网站后台功能,将来电urllib.urlopen(url))从URL检索数据。部署完成后,除此之外,其他所有功能都运行良好。调用此函数的结果为[Errno socket error] [Errno -2] Name or service not known。它似乎无法找到主机。使用Apache和mod_wsgi部署Django站点后发生套接字错误?

但是,如果使用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都是我的机器上。这是一个问题吗?

+0

可能想提供您的设置和引发异常的函数的详细信息。 – zeekay 2011-05-30 23:28:19

+0

你的代码访问什么网址? – 2011-05-30 23:30:32

+0

@蒂姆 - 耶茨这是通过'http://dict.cn/ws.php UTF8 =真&Q =%s'?我可以在python shell中没有错误地调用这个函数。 – amazingjxq 2011-05-30 23:36:02

回答

0

这是可能的,这可能是一个权限问题或者你的Apache环境的东西。尝试使用简单的WSGI脚本作为测试URL获取的基准:

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 
+0

我在httpd.conf中添加了虚拟主机配置,它起作用。我不知道为什么。谢谢你的帮助。 – amazingjxq 2011-05-31 13:15:10