如何从生产服务器将文件上传到静态服务器?

时间:2010-10-16 04:32:28

标签: django file-upload

我的生产箱上有django和django的管理员设置。这意味着所有文件上传都存储在生产框中,所有媒体都存储在那里。

我现在有一个单独的文件服务器(不同的盒子,ip)。我想在那里上传我的文件。我想到的这些方法有哪些优点和缺点,你能提出哪些“更好”的方法?

  1. 设置脚本,以便在文件上传到静态服务器后在生产框上执行rsync
  2. 在生产盒上设置永久性安装,方法是在静态媒体盒上使用文件服务器,例如nfs / samba / ssh-fs,然后使用mount的位置作为生产中的upload_to路径框
  3. 信息:两台服务器都运行debian。

    编辑:来自#django的普罗米修斯建议http://docs.djangoproject.com/en/dev/howto/custom-file-storage/

2 个答案:

答案 0 :(得分:2)

我使用Fabric。特别感兴趣的是 fabric.contrib.project.rsync_project()

解释 -

  

Fabric是一个Python库和   用于简化的命令行工具   使用SSH进行应用程序部署   或系统管理任务。

首先使用fabric.contrib.project.upload_project()上传整个项目目录。从那时起,开始使用fabric.contrib.project.rsync_project。将项目与本地版本同步。另外特别感兴趣的是,它使用unix rsync下面的&使用安全scp传输.tar.gz数据。

我想这可以满足您的需求。可能不需要设置永久性安装等。

答案 1 :(得分:1)

如果您的静态媒体源自您的开发过程,那么Fabric就是您的选择。它可以自动部署和复制任何内容 - 数据,应用程序文件,甚至静态数据库转储 - 从任何地方到任何地方。

如果您的静态媒体源自您的应用程序服务器的操作 - 生成的PDF和图像,来自您的用户的上传,已编译的二进制文件(我有一个想要它的客户,一个Django应用程序将接受原始x86程序集并返回一个编译和链接二进制文件 - 然后你想使用Django Storages,一个抽象任何ImageField或FileField(或任何具有类似Python文件的界面)的内容实际存储的应用程序。它支持将它们存储在数据库,Amazon S3,FTP和其他一些数据库中。