2016-03-22 16 views
5

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 
+1

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

Odpowiedz

1

możesz określić, że jesteś na systemie plików NFS P

lockf == stado UNSUPORTED przez NFS

cf innego stanowiska w stosie "flock vs lockf"

Jeśli semantyka (zachowanie na marginesie deskryptora, rozwidlone, etc.) jest dopuszczalne, należy wolisz lockf()/fcntl() Zamki nad stadem().

Blokady w Linuksie, po prostu dlatego, że poprzednia działa na systemach plików NFS itp., Podczas gdy druga nie.

W przypadku BSD i Mac OS X, uważam, że należy zamiast tego jawnie używać funkcji fcntl().

proponuję skierować swoje działania na/Temp/lub goinfre/

Powiązane problemy