2009-01-04 11 views
8

मैं ओपेक्स/तेंदुए पर अपाचे + mod_python 3.3.1 + पायथन 2.6.1 (सभी 64-बिट मोड में चल रहे) के साथ चलाने के लिए अपना पहला Django 1.0.2 एप्लिकेशन पोर्ट करने का प्रयास कर रहा हूं और मैं हूं Django विकास सर्वर के साथ परीक्षण करते समय मौजूद फ़ाइल अपलोड करते समय कभी-कभी त्रुटि का सामना करना पड़ रहा था।Django फ़ाइल अपलोड कभी-कभी असफल हो रहा है

अपलोड करने के लिए कोड क्या Django दस्तावेज़ में वर्णित के समान है:

class UploadFileForm(forms.Form): 
    file = forms.FileField() 
    description = forms.CharField(max_length=100) 
    notifygroup = forms.BooleanField(label='Notify Group?', required=False) 

def upload_file(request, date, meetingid): 
    print date, meetingid 
    if request.method == 'POST': 
     print 'before reloading the form...' 
     form = UploadFileForm(request.POST, request.FILES) 
    print 'after reloading the form' 
     if form.is_valid(): 
      try: 
       handle_uploaded_file(request.FILES['file'], request.REQUEST['date'], request.REQUEST['description'], form.cleaned_data['notifygroup'], meetingid) 
      except: 
       return render_to_response('uploaded.html', { 'message': 'Error! File not uploaded!' }) 
      return HttpResponseRedirect('/myapp/uploaded/') 
    else: 
     form = UploadFileForm() 
    return render_to_response('upload.html', {'form': form, 'date':date, 'meetingid':meetingid}) 

इस कोड को सामान्य रूप से ठीक से काम करता है, लेकिन कभी कभी (जैसे कि, एक बार हर 10 अपलोड) और एक काफी लंबी इंतजार कर समय के बाद, यह निम्न त्रुटि के साथ विफल रहता है:

IOError at /myapp/upload/2009-01-03/1 
Client read error (Timeout?) 
Request Method: POST 
Request URL: http://192.168.0.164/myapp/upload/2009-01-03/1 
Exception Type: IOError 
Exception Value:  
Client read error (Timeout?) 
Exception Location: /Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6/site-packages/django/http/multipartparser.py in read, line 406 
Python Executable: /usr/sbin/httpd 
Python Version: 2.6.1 
Python Path: ['/djangoapps/myapp/', '/djangoapps/', '/Library/Frameworks/Python64.framework/Versions/2.6/lib/python26.zip', '/Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6', '/Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6/plat-darwin', '/Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6/plat-mac', '/Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6/plat-mac/lib-scriptpackages', '/Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6/lib-tk', '/Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6/lib-old', '/Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6/lib-dynload', '/Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6/site-packages'] 
Server time: Sun, 4 Jan 2009 22:42:04 +0100 

Environment: 

Request Method: POST 
Request URL: http://192.168.0.164/myapp/upload/2009-01-03/1 
Django Version: 1.0.2 final 
Python Version: 2.6.1 
Installed Applications: 
['django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.admin', 
'myapp.application1'] 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware') 

Traceback: 
File "/Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6/site-packages/django/core/handlers/base.py" in get_response 
    86.     response = callback(request, *callback_args, **callback_kwargs) 
File "/djangoapps/myapp/../myapp/application1/views.py" in upload_file 
    137.   form = UploadFileForm(request.POST, request.FILES) 
File "/Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6/site-packages/django/core/handlers/modpython.py" in _get_post 
    113.    self._load_post_and_files() 
File "/Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6/site-packages/django/core/handlers/modpython.py" in _load_post_and_files 
    87.     self._post, self._files = self.parse_file_upload(self.META, self._req) 
File "/Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6/site-packages/django/http/__init__.py" in parse_file_upload 
    124.   return parser.parse() 
File "/Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6/site-packages/django/http/multipartparser.py" in parse 
    134.    for item_type, meta_data, field_stream in Parser(stream, self._boundary): 
File "/Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6/site-packages/django/http/multipartparser.py" in __iter__ 
    607.   for sub_stream in boundarystream: 
File "/Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6/site-packages/django/http/multipartparser.py" in next 
    421.    return LazyStream(BoundaryIter(self._stream, self._boundary)) 
File "/Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6/site-packages/django/http/multipartparser.py" in __init__ 
    447.   unused_char = self._stream.read(1) 
File "/Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6/site-packages/django/http/multipartparser.py" in read 
    300.   out = ''.join(parts()) 
File "/Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6/site-packages/django/http/multipartparser.py" in parts 
    293.     chunk = self.next() 
File "/Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6/site-packages/django/http/multipartparser.py" in next 
    315.    output = self._producer.next() 
File "/Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6/site-packages/django/http/multipartparser.py" in next 
    376.    data = self.flo.read(self.chunk_size) 
File "/Library/Frameworks/Python64.framework/Versions/2.6/lib/python2.6/site-packages/django/http/multipartparser.py" in read 
    406.   return self._file.read(num_bytes) 

Exception Type: IOError at /myapp/upload/2009-01-03/1 
Exception Value: Client read error (Timeout?) 

मैंने mod_wsgi का उपयोग करके सब कुछ चलाने की कोशिश की और कोई फर्क नहीं पड़ता।

क्या कोई जानता है कि मैं क्या गलत कर रहा हूं?

आपकी मदद के लिए अग्रिम धन्यवाद!

ppdo

=====

अपडेट किया गया:

हालांकि मैं, बड़ी फ़ाइलों (60 + एमबी) अपलोड करने में विफल रहता है जब यह यह के आकार के साथ कोई स्पष्ट संबंध के साथ विफल सफल रहा अपलोड करें, यानी यह 10kb फ़ाइलों के साथ भी विफल रहता है जिन्हें सफलतापूर्वक अपलोड किया गया है।

उत्तर

0

फ़ाइल कितनी बड़ी है? अपलोड स्क्रिप्ट के समय को अपलोड करने में काफी समय लग सकता है, इसलिए उस स्क्रिप्ट के लिए निष्पादन समय बढ़ाने का प्रयास करें।

+0

क्षमा करें, यह नहीं है: मैं बड़ी फाइलें अपलोड कर सकता हूं और यह अभी भी छोटे लोगों के साथ विफल रहता है।अद्यतन प्रश्न देखें। फिर भी धन्यवाद। –

1

मैं अपवाद मूल्य

Client read error (Timeout?) 

यह पर्याप्त अजीब लगता है का पीछा करेंगे। पढ़ने की कोशिश करें this thread

8

mod_wsgi का उपयोग करके समस्या फ़ायरफ़ॉक्स के लिए दूर हो गई।

अपाचे और सफारी के बीच एक इंटरैक्शन समस्या के लिए मेरे शोध को सीमित करते हुए, मैंने अपाचे https://bugs.webkit.org/show_bug.cgi?id=5760 के लिए इस बग रिपोर्ट पर ठोकर खाई जो कुछ भी हो रहा है के समान कुछ वर्णन करता है और यह स्पष्ट रूप से अभी भी खुला है। इसे पढ़ने से मुझे रख-रखाव को आजमाने और अक्षम करने का विचार दिया गया, और हालांकि मुझे इसे अधिक व्यापक रूप से परीक्षण करने की आवश्यकता है, ऐसा लगता है कि समस्या खत्म हो गई है।

एक साधारण:

BrowserMatch "सफारी" nokeepalive

अपाचे विन्यास में चाल किया था।

+0

मुझे इन आंकड़ों के साथ यह अपवाद मिला। 'HTTP_USER_AGENT': 'मोज़िला/4.0 (संगत; एमएसआईई 8.0; विंडोज एनटी 5.1; ट्राइडेंट/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)', – Oduvan

0

लंबे समय से अनुत्तरित, लेकिन इसे स्वयं अनुभव किया और इसे हल करने के लिए कुछ चीजों की कोशिश की। ऐसा लगता है कि मेरे मामले में, ऐसा हुआ जब किसी ने अपलोड के दौरान डाउनलोड (या खोया कनेक्शन) रद्द कर दिया।

आप यह देखने के लिए स्वयं को आजमा सकते हैं कि "IOError: अनुरोध डेटा पढ़ने में त्रुटि" क्या है: एक बड़ी पर्याप्त फ़ाइल अपलोड करें जिसे आप अपने ईथरनेट केबल को अपने कंप्यूटर या राउटर से अनप्लग कर सकते हैं। थोड़ा इंतजार करें और देखें कि क्या आपको त्रुटि मिलती है या नहीं। मैं हर बार करता हूँ!

संबंधित मुद्दे