【问题标题】:Socket error after Django site deployed using apache and mod_wsgi?使用 apache 和 mod_wsgi 部署 Django 站点后的套接字错误?
【发布时间】:2011-05-30 23:16:23
【问题描述】:

我的站点中有一个后端函数,它将调用urllib.urlopen(url)) 来从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 都在我的机器上。这是个问题吗?

【问题讨论】:

  • 可能需要提供设置的详细信息以及引发异常的函数。
  • 你的代码访问的是哪个 url?
  • @tim-yates 这是http://dict.cn/ws.php?utf8=true&amp;q=%s。我可以在 python shell 中调用这个函数而不会出错。

标签: python django apache mod-wsgi


【解决方案1】:

这可能是您的 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

【讨论】:

  • 我在 httpd.conf 中添加了虚拟主机配置,它可以工作。我不知道为什么。感谢您的帮助。
猜你喜欢
  • 2014-07-31
  • 2021-01-15
  • 2014-07-25
  • 1970-01-01
  • 2011-07-14
  • 2012-06-17
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
相关资源
最近更新 更多