vmo*_*eco 6 django macos nfs python-3.x
当我尝试通过django管理界面上传媒体文件时,我收到此错误:
OSError: [Errno 45] Operation not supported
Run Code Online (Sandbox Code Playgroud)
这是追溯的最后一行:
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)
Run Code Online (Sandbox Code Playgroud)
我找到了这个答案,其中一条评论让我看到了这张票,然后是这个提交,在票证中作为"解决方法"引入(见下文).
以下是django/core/files/locks.py根据解决方法我应该做的更改.
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)
Run Code Online (Sandbox Code Playgroud)
我试图手动反转此提交的更改(用flock()调用替换lockf()调用),但我仍然得到相同的错误.还有补丁,但这些补丁看起来很旧(约7岁,我使用django 1.9和python 3.5).
我该怎么解决这个问题?
编辑:
正如plombix所提到的,我的主目录安装在NFS上.
编辑2:
我也尝试用fcntl.fcntl()调用替换flock调用,我得到了一个不同的错误:
OSError: [Errno 14] Bad address
Run Code Online (Sandbox Code Playgroud)
您可能想要指定您位于 NFS 文件系统上;P
lockf == flock 不受 NFS 支持
参见堆栈中的其他帖子“ flock vs lockf ”
如果语义(描述符传递、分叉等方面的行为)可以接受,那么您应该更喜欢使用 lockf()/fcntl() 锁而不是 fancy() 锁。
Linux 中的锁,只是因为前者适用于 NFS 等文件系统,而后者则不然。
在 BSD 和 Mac OS X 上,我相信您需要显式使用 fcntl()。
我建议您将操作重定向到 /temp 或 /goinfre/
| 归档时间: |
|
| 查看次数: |
343 次 |
| 最近记录: |