如何在没有mercurial文件的情况下将Django部署到生产服务器?

时间:2012-08-06 10:16:09

标签: django mercurial

我原来是.NET开发人员,当我们不得不从Visual Studio发布软件时,我们不得不将其切换到发布模式,以确保删除调试挂钩并保留存储库文件。最终结果是一组准备好投入生产的文件。

切换到Django并使用它近三个月后,我现在准备部署第一个应用程序了。我已经做了很多阅读。我知道如何将debug设置为False并拥有production_setting.py以及如何在Apache上使用WSGI进行部署。

但是我仍然没有想到的是推出一个版本的好方法。

根据我现在所知,我会为发布做以下事情:

  • 手动将所有文件复制到上传目录(隐藏的mercurial目录除外)
  • 全部拉链
  • 将他们通过SCP发送到Ubuntu服务器
  • 登录服务器
  • 提取zip文件并将所有内容放置到位
  • 修改setting_production.py并输入凭据

这是Django部署的健康过程吗? :)
仅供参考我使用的是Aptana Studio 3.2.1

感谢您提供任何提示

2 个答案:

答案 0 :(得分:2)

您可以查看Fabric;文档将其描述为

  

...一个Python(2.5或更高版本)库和命令行工具,用于简化SSH在应用程序部署或系统管理任务中的使用。

它能够做你想要的所有事情。

您的“部署”任务可能包含多个子任务(_upload_tar_from_hg()_migrate() 等。),但总体情况如下:

from fabric.api import * 

env.release_name = 'foo_bar-1.0'
env.deployment_path = '/var/www/django/%s' % env.release_name    

def deploy():
    local('hg archive -t tgz $s.tar.gz' % env.release)
    put('%s.tar.gz' % env.release, env.deployment_dir)
    run('cd %s && tar -xzvf %s.tar.gz' % (env.deployment_path, env.release))
    local('rm %s.tar.gz' % env.release)
    run('cd %s/%s && ln -s settings_production.py settings.py' % (env.deployment_path, env.release))

这取决于在源代码管理中使用单独的settings_production.py,这可能不合适。 Fabric可以在文本文件中查找和替换,也可以使用a local_settings.py approach组合设置。

查看the Fabric tutorial以填补空白(例如指定服务器的连接详细信息。一旦设置完成,只需运行

fab deploy

并且该过程应自动进行。

NB 使用hg命令在一步中完成从Mercurial创建没有hg archive元数据的存档

答案 1 :(得分:1)

在目标服务器上设置remote Mercurial repo。使用带有“hg”用户的SSH密钥通常是最安全的方式,因为您可以限制对该用户的shell访问,并且只允许它访问该存储库。

推送到该回购并使用post-receive挂钩检查您的推送到您的Web服务器将提供的文件夹(并在需要时重新加载您的Web服务器)。

您还可以在设置文件中添加一个条件,检查应用程序是否在生产服务器上(例如检查文件或环境变量)并加载相关设置(settings_prod.py或settings_dev.py)