Lorsque je tente de télécharger un fichier multimédia via l'interface admin django, je reçois cette erreur:OSError lors du téléchargement des fichiers sur un NFS
OSError: [Errno 45] Operation not supported
Voici la dernière ligne du retraçage:
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)
J'ai trouvé this answer et l'un des commentaires m'a conduit à this ticket, puis à this commit, introduit dans le ticket comme une «solution de contournement» (voir ci-dessous).
Voici les modifications que je devrais faire dans django/core/files/locks.py
selon la solution de contournement.
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)
J'ai essayé d'inverser manuellement les modifications de ce commit (remplacement flock()
appels avec lockf()
appels), mais je reçois toujours la même erreur. Il y a aussi des correctifs, mais ces correctifs semblent vieux (~ 7 ans et j'utilise django 1.9 avec python 3.5).
Comment pourrais-je résoudre ce problème?
EDIT:
Comme mentionné plombix, mon répertoire est monté sur un NFS.
EDIT2:
J'ai aussi essayé de remplacer le troupeau appelle avec fcntl.fcntl()
appels et je suis une autre erreur:
OSError: [Errno 14] Bad address
branche de dokterbob [a] ce commit (https://github.com/dokterbob/django/commit/bbc5118190fc52e4386a530b03adf00ba7e4c306), des commentaires sur la question, cela permet simplement de passer une implémentation de verrouillage. Vous devez maintenant en trouver un qui fonctionne pour les montages AFP. – tutuDajuju