django app多个硬盘[Errno 18]无效的跨设备链接

时间:2016-10-17 14:00:21

标签: python django server debian-based

我在Debian服务器上有一个Django应用程序,当前磁盘上当前的site_media目录已满。所以我想在第二个磁盘上传文件。服务器上的路径是/ disk:

        obj = form.save(commit=False)
        obj.user_id = self.request.user.pk
        obj.save()
        initial_path = obj.file.path
        print(initial_path)
        new = settings.MEDIA_ROOT_NEW + obj.file.name
        print(new)
        os.rename(initial_path,new)
        shutil.move(initial_path, new)

在我的settings.py中我有:

        MEDIA_ROOT = os.path.join(PROJECT_PATH, 'site_media/')
        MEDIA_ROOT_NEW = '/disk/site_media/'

我仍然得到错误: django [Errno 18]无效的跨设备链接

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

os.rename()可能会导致across个不同的文件系统失败。

  

如果src和dst在不同的文件系统上,那么某些Unix风格的操作可能会失败。

shutil.move() should工作

  

如果目标位于当前文件系统上,则使用os.rename()。否则,将src复制(使用shutil.copy2())到dst然后删除。

但是你os.rename(initial_path,new)之前就有shutil.move(initial_path, new)了。删除第一个os.rename(),它应该可以工作。