Quando provo a caricare un file media attraverso l'interfaccia di Django di amministrazione, ottengo questo errore:OSError durante il caricamento di file su un NFS
OSError: [Errno 45] Operation not supported
Ecco l'ultima riga della 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)
Ho trovato this answer e uno dei commenti mi ha portato a this ticket e quindi a this commit, introdotto nel ticket come "soluzione" (vedi sotto).
Ecco le modifiche che dovrei fare in django/core/files/locks.py
in base alla soluzione alternativa.
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)
Ho cercato di invertire manualmente le modifiche da questo commit (sostituendo flock()
chiamate con lockf()
chiamate), ma ancora ottengo lo stesso errore. Ci sono anche patch, ma queste patch sembrano vecchie (~ 7 anni e uso django 1.9 con python 3.5).
Come posso risolvere questo?
EDIT:
Come plombix detto, la mia home directory è montato su un NFS.
EDIT2:
Ho anche provato a sostituire il gregge chiamate con fcntl.fcntl()
chiamate e ho ottenuto un errore diverso:
OSError: [Errno 14] Bad address
ramo di dokterbob [ha questo commettere] (https://github.com/dokterbob/django/commit/bbc5118190fc52e4386a530b03adf00ba7e4c306), dai commenti sul problema, questo semplicemente consente di passare un'implementazione di blocco. Ora devi trovarne uno che funzioni per i supporti AFP. – tutuDajuju