Kiedy próbuję załadować plik multimedialny za pośrednictwem interfejsu Django administratora, otrzymuję ten błąd:OSError podczas przesyłania plików przez NFS
OSError: [Errno 45] Operation not supported
Oto ostatnia linia 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)
Znalazłem this answer i jeden z komentarzy doprowadził mnie do this ticket, a następnie do this commit, wprowadzony w bilecie jako "obejście" (patrz poniżej).
Oto zmiana, którą powinienem wykonać w django/core/files/locks.py
zgodnie z obejściem.
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)
Próbowałem ręcznie odwrócić zmian z tego commit (zastępując flock()
połączeń z lockf()
połączeń), ale wciąż otrzymuję ten sam błąd. Są też łatki, ale te łatki wydają się stare (~ 7 lat i używam django 1.9 z pythonem 3.5).
Jak mogę rozwiązać ten problem?
EDIT:
Jak plombix wspomniano, mój katalog domowy jest zamontowany na NFS.
EDIT2:
Próbowałem też zastąpić stado wzywa z fcntl.fcntl()
połączeń i mam inny błąd:
OSError: [Errno 14] Bad address
oddział dokterbob za [ma to popełniają] (https://github.com/dokterbob/django/commit/bbc5118190fc52e4386a530b03adf00ba7e4c306), od komentarzy w tej kwestii, pozwala to po prostu przejść do realizacji blokowania. Teraz musisz znaleźć taki, który działa na mocowanie AFP. – tutuDajuju