【问题标题】:OSerror when uploading files over a NFS通过 NFS 上传文件时出现 OSerror
【发布时间】:2016-07-09 08:07:34
【问题描述】:

当我尝试通过 django 管理界面上传媒体文件时,我收到此错误:

OSError: [Errno 45] Operation not supported

这是回溯的最后一行:

  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)

我找到了this answer,其中一位 cmets 将我带到了this ticket,然后又找到了this commit,作为“解决方法”在票证中介绍(见下文)。

根据解决方法,这是我应该在 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)

我尝试手动撤消此提交的更改(将 flock() 调用替换为 lockf() 调用),但我仍然遇到相同的错误。 也有补丁,但这些补丁似乎很旧(大约 7 岁,我使用 django 1.9 和 python 3.5)。

我该如何解决这个问题?

编辑:

正如 plombix 提到的,我的主目录安装在 NFS 上。

EDIT2:

我还尝试用fcntl.fcntl() 调用替换群调用,但我得到了一个不同的错误:

OSError: [Errno 14] Bad address

【问题讨论】:

  • dokterbob 的分支has this commit,来自有关问题的 cmets,这只是允许传递锁定实现。现在你需要找到一个适用于 AFP 支架的。

标签: django macos python-3.x nfs


【解决方案1】:

您可能希望指定您在 NFS 文件系统上;P

lockf == 羊群 不受 NFS 支持

cf 堆栈中的其他帖子“flock vs lockf

如果语义(通过描述符传递、分叉等的行为)是可以接受的,你应该更喜欢 lockf()/fcntl() 锁而不是 flock()。

Linux 中的锁,只是因为前者适用于 NFS 等文件系统,而后者不适用。

在 BSD 和 Mac OS X 上,我相信您需要明确地使用 fcntl()。

我建议您将操作重定向到 /temp 或 /goinfre/

【讨论】:

    【解决方案2】:

    我正在使用 Django 2.0.5 加入我未经证实的解决方案。通过检查locks.py in this version,似乎如果“不支持文件锁定”,lockunlock 方法将被填充为“不做任何事情的虚拟函数”。

    但是尝试锁定 NFS 系统不会落入except 块中,因此需要进行 polyfill。所以我手动修补了 else 块以进行填充。

    def lock(f, flags):
        # ret = fcntl.flock(_fd(f), flags)
        # return ret == 0
        return False
    
    def unlock(f):
        # ret = fcntl.flock(_fd(f), fcntl.LOCK_UN)
        # return ret == 0
        return True
    

    当然,这不是最好的解决方案。但 Django 暂时在我的本地机器上做了一个runserver

    【讨论】:

      猜你喜欢
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 2015-04-04
      • 2017-10-12
      相关资源
      最近更新 更多