Câu hỏi của tôi tương tự như câu hỏi được báo cáo here, nhưng giải pháp được đề xuất không hoạt động đối với tôi. Tôi đang cố tải lên một tệp có tên 'Testaråäö.txt' thông qua ứng dụng quản trị Django.UnicodeEncodeError khi tải lên tệp trong quản trị Django
Tôi đang chạy Django 1.3.1 với Gunicorn 0.13.4 và Nginx 0.7.6.7 trên máy chủ Debian 6. Cơ sở dữ liệu là PostgreSQL 8.4.9. Các dữ liệu Unicode khác được lưu vào cơ sở dữ liệu mà không có vấn đề gì, vì vậy tôi đoán vấn đề phải ở trong hệ thống tập tin bằng cách nào đó.
tôi đã thiết
http {
charset utf-8;
}
trong nginx.conf tôi. LC_ALL và LANG được đặt thành 'sv_SE.UTF-8'. Chạy 'locale' xác minh điều này. Tôi thậm chí đã cố gắng thiết lập LC_ALL và LANG trong init script nginx của tôi chỉ để đảm bảo locale được thiết lập đúng.
Đây là traceback:
Traceback (most recent call last):
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/core/handlers/base.py", line 111, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/contrib/admin/options.py", line 307, in wrapper
return self.admin_site.admin_view(view)(*args, **kwargs)
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/utils/decorators.py", line 93, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/views/decorators/cache.py", line 79, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/contrib/admin/sites.py", line 197, in inner
return view(request, *args, **kwargs)
File "/srv/django/letebo/app/cms/admin.py", line 81, in change_view
return super(PageAdmin, self).change_view(request, obj_id)
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/utils/decorators.py", line 28, in _wrapper
return bound_func(*args, **kwargs)
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/utils/decorators.py", line 93, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/utils/decorators.py", line 24, in bound_func
return func(self, *args2, **kwargs2)
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/db/transaction.py", line 217, in inner
res = func(*args, **kwargs)
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/contrib/admin/options.py", line 985, in change_view
self.save_formset(request, form, formset, change=True)
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/contrib/admin/options.py", line 677, in save_formset
formset.save()
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/forms/models.py", line 482, in save
return self.save_existing_objects(commit) + self.save_new_objects(commit)
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/forms/models.py", line 613, in save_new_objects
self.new_objects.append(self.save_new(form, commit=commit))
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/forms/models.py", line 717, in save_new
obj.save()
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/db/models/base.py", line 460, in save
self.save_base(using=using, force_insert=force_insert, force_update=force_update)
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/db/models/base.py", line 504, in save_base
self.save_base(cls=parent, origin=org, using=using)
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/db/models/base.py", line 543, in save_base
for f in meta.local_fields if not isinstance(f, AutoField)]
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/db/models/fields/files.py", line 255, in pre_save
file.save(file.name, file, save=False)
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/db/models/fields/files.py", line 92, in save
self.name = self.storage.save(name, content)
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/core/files/storage.py", line 48, in save
name = self.get_available_name(name)
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/core/files/storage.py", line 74, in get_available_name
while self.exists(name):
File "/srv/.virtualenvs/letebo/lib/python2.6/site-packages/django/core/files/storage.py", line 218, in exists
return os.path.exists(self.path(name))
File "/srv/.virtualenvs/letebo/lib/python2.6/genericpath.py", line 18, in exists
st = os.stat(path)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 52-54: ordinal not in range(128)
UPDATE: Tôi cố gắng chạy Gunicorn với gỡ lỗi bật, và các tập tin tải lên mà không cần bất kỳ vấn đề gì cả. Tôi cho rằng điều này có nghĩa là vấn đề là với Nginx. Tuy nhiên, tôi vẫn đánh bại tôi. Dưới đây là các tiêu đề phản ứng thô từ Gunicorn và Nginx, nếu nó làm cho bất kỳ ý nghĩa:
Gunicorn:
HTTP/1.1 302 FOUND
Server: gunicorn/0.13.4
Date: Thu, 09 Feb 2012 14:50:27 GMT
Connection: close
Transfer-Encoding: chunked
Expires: Thu, 09 Feb 2012 14:50:27 GMT
Vary: Cookie
Last-Modified: Thu, 09 Feb 2012 14:50:27 GMT
Location: http://my-server.se:8000/admin/cms/page/15/
Cache-Control: max-age=0
Content-Type: text/html; charset=utf-8
Set-Cookie: messages="yada yada yada"; Path=/
Nginx:
HTTP/1.1 500 INTERNAL SERVER ERROR
Server: nginx/0.7.67
Date: Thu, 09 Feb 2012 14:50:57 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Vary: Cookie
500
bạn đã bao giờ có được một sửa chữa cho điều này? làm thế nào bạn bắt đầu gunicorn? – ashwoods
Xin lỗi, không. Tôi nói với khách hàng của tôi chỉ đơn giản là tránh sử dụng các ký tự unicode cho đến khi tôi có thể tìm thấy một giải pháp (mà nhiều hơn và nhiều hơn nữa trông giống như di chuyển đến một máy chủ khác nhau). Tôi đang sử dụng Supervisor để bắt đầu gunicorn. –
Điều này cũng xảy ra với chúng tôi. Cùng một thiết lập - NginX, Giám sát viên, Gunicorn chạy ứng dụng Django.Tôi đã lãng phí hai giờ cố gắng để sửa chữa nó, đã thử tất cả các khuyến nghị ở khắp mọi nơi trên internet mà không có bất kỳ may mắn. Hy vọng rằng, ai đó sẽ tìm cách để làm việc này sau cùng. – xaralis