Khi tôi cố gắng để tải lên một tập tin media thông qua giao diện django admin, tôi nhận được lỗi này:OSerror khi tải lên tập tin trên một NFS
OSError: [Errno 45] Operation not supported
Đây là dòng cuối cùng của traceback:
File "/path/to/home/Envs/myenv/lib/python3.5/site-packages/django/core/files/locks.py", line 112, in unlock
ret = fcntl.lockf(_fd(f), fcntl.LOCK_UN)
Tôi tìm thấy this answer và một trong các nhận xét đã dẫn tôi đến this ticket và sau đó đến this commit, được giới thiệu trong vé dưới dạng "cách giải quyết" (xem bên dưới).
Đây là thay đổi tôi nên thực hiện trong django/core/files/locks.py
theo giải pháp thay thế.
elif system_type == 'posix':
def lock(file, flags):
- fcntl.flock(fd(file), flags)
+ fcntl.lockf(fd(file), flags)
def unlock(file):
- fcntl.flock(fd(file), fcntl.LOCK_UN)
+ fcntl.lockf(fd(file), fcntl.LOCK_UN)
Tôi cố gắng để tự đảo ngược các thay đổi từ này cam kết (thay thế flock()
cuộc gọi với lockf()
cuộc gọi), nhưng nó tôi vẫn nhận được lỗi tương tự. Ngoài ra còn có các bản vá lỗi, nhưng các bản vá lỗi này dường như cũ (~ 7 tuổi và tôi sử dụng django 1.9 với python 3.5).
Tôi làm cách nào để giải quyết vấn đề này?
EDIT:
Như plombix đề cập, thư mục chính của tôi được gắn trên một NFS.
EDIT2:
Tôi cũng đã cố gắng để thay thế cho bầy gọi với fcntl.fcntl()
cuộc gọi và tôi đã nhận một lỗi khác nhau:
OSError: [Errno 14] Bad address
dokterbob của chi nhánh [có này cam kết] (https://github.com/dokterbob/django/commit/bbc5118190fc52e4386a530b03adf00ba7e4c306), từ các ý kiến về vấn đề này, điều này chỉ đơn giản cho phép đi qua một thực hiện khóa. Bây giờ bạn cần phải tìm một trong đó làm việc cho AFP gắn kết. – tutuDajuju