2010-12-29 42 views
38

Điều gì có thể gây ra lỗi này:Tại sao mod_wsgi không thể ghi dữ liệu? IOError: thất bại trong việc ghi dữ liệu

$ sudo đuôi -n 100 /var/log/apache2/error.log'

[Wed Dec 29 15:20:03 2010] [error] [client 220.181.108.181] mod_wsgi (pid=20343): Exception occurred processing WSGI script '/home/username/public_html/idm.wsgi'. 
[Wed Dec 29 15:20:03 2010] [error] [client 220.181.108.181] IOError: failed to write data 

Đây là kịch bản WSGI:

$ cat public_html/idm.wsgi 
import os 
import sys 

sys.path.append('/home/username/public_html/IDM_app/') 

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

import django.core.handlers.wsgi 

application = django.core.handlers.wsgi.WSGIHandler() 

Tại sao Django không thể ghi dữ liệu?

Tôi đang chạy Django 1.2.4

+0

liên quan: http: //stackoverflow.com/a/7089413/633961 – guettli

Trả lời

-4

Tôi đang đặt cược nó là vấn đề quyền. True làm cho thư mục/tập tin mục tiêu phổ ghi được. Sau đó tạo tệp do nhóm dữ liệu www của bạn sở hữu (hoặc bất kỳ người dùng apache nào của bạn), làm cho nhóm đó có thể ghi và đảm bảo không có thư mục nào nhạy cảm vì đây có thể là sự cố bảo mật.

26

lỗi đó, mà không cần bất kỳ loại Python traceback, có thể là một sự thay đổi về vấn đề mô tả trong:

http://code.google.com/p/modwsgi/issues/detail?id=29&can=1

Đó là, xảy ra khi HTTP kết nối khách hàng bị mất trước khi đáp ứng đầy đủ có thể được viết lại bởi máy chủ web. Nó có thể biểu hiện dưới dạng 'kết nối máy khách đóng', 'không ghi dữ liệu' hoặc 'không xóa dữ liệu' IOError trong nhật ký lỗi Apache. Tức là, không được thấy bởi ứng dụng WSGI vì việc ghi dữ liệu đang xảy ra sau khi ứng dụng WSGI đã quay trở lại và vì vậy không thể ném ngoại lệ trở lại ứng dụng để làm bất cứ điều gì.

Câu hỏi đặt ra là liệu bạn có nhận được thông báo lỗi từ Django không nếu bạn định cấu hình lỗi được gửi cho bạn qua email. Nếu bạn làm thế, thay vào đó là một cái gì đó đang xảy ra ở Django.

+0

Nhưng làm thế nào để giải quyết nó? Trong ứng dụng của tôi, nó có vẻ liên quan đến send_mail (mất nhiều thời gian) ... – gabn88

+1

Không có điểm thêm một câu hỏi mơ hồ không có thông tin cụ thể về trường hợp của bạn để một followup hiện có cho câu hỏi của người khác. Tình hình của bạn có thể hoàn toàn khác. Tạo một câu hỏi mới giải thích chi tiết vấn đề của bạn. –

+0

Tôi xin lỗi, nhưng tôi đã gặp lỗi tương tự và tôi đã định cấu hình Django để gửi email nhưng không nhận được thư nào. Trong trường hợp của tôi, vấn đề là tôi đã thay đổi mật khẩu hộp thư smtp của mình mà không thay đổi mật khẩu đó ở Django. Có thể giúp ai đó trong tương lai, những người đang tìm kiếm cùng một vấn đề như tôi đã làm ... Không có cách nào làm hại ai cả! – gabn88

5

Tôi gặp vấn đề tương tự trong một ứng dụng sử dụng nhiều cuộc gọi AJAX (mod_wsgi 3.3). Có bất kỳ giải pháp đã biết cho điều này? Tôi nghĩ về việc bỏ qua ngoại lệ, nhưng đó không phải là một ý tưởng hay.

CẬP NHẬT

Trên thực tế, điều này có thể là do một vài điều, nhưng nguyên nhân có thể xảy ra nhất là bạn đang sử dụng write callback thay vì yield ing đầu ra của bạn.

Tôi tin rằng điều này sẽ giúp:

http://groups.google.com/group/modwsgi/browse_thread/thread/c9cc1307bc10cfff

+1

Sẽ xảy ra với viết hoặc sản lượng, không có sự khác biệt. Django không sử dụng viết năng suất chỉ. Nếu viết đã được sử dụng, lỗi sẽ lan truyền trở lại vào ứng dụng WSGI và ứng dụng có khả năng sẽ bắt nó và được chuyển đổi thành 500 với nó không được ghi lại. Đối với sản lượng, đó là mod_wsgi ghi dữ liệu và không có cách nào để truyền lỗi trở lại ứng dụng, do đó, lỗi nhật ký mod_wsgi không có dấu vết không phải là theo ngữ cảnh của ứng dụng. –

0

tôi đã tìm thấy cùng một vấn đề với ứng dụng web python của tôi trong đại dương Digital và sau khi kiểm tra các log file nghiêm túc tôi đã phát hiện ra rằng Đó là một vấn đề với mysql Database của tôi! Vấn đề là do tôi đã hết bộ nhớ (RAM) Vì vậy hãy kiểm tra những câu hỏi đó và giải quyết vấn đề!

'For Mysql

this

hy vọng nó sẽ giúp

Các vấn đề liên quan