2012-08-06 55 views
4

我最初是一名.NET开发人员,当时我们不得不从Visual Studio发布一个软件,我们不得不将它切换到发布模式,以确保调试挂钩被移除,并且存储库文件被留下。最终的结果是一整套准备投入生产的文件。如何将Django部署到没有mercurial文件的生产服务器上?

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

但我还没有想出的是推出发布的一个很好的过程。

与我现在知道了,我会做一个发布以下内容:(不包括隐藏善变目​​录)

  • 复制手的所有文件的上传目录
  • 邮编他们都
  • 把他们在SCP的Ubuntu的服务器
  • 登录到服务器
  • 解压缩zip文件,并把一切都到位
  • 修改setting_production.py并输入凭据

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

感谢您的任何提示

+2

在目标服务器上设置远程Mercurial回购。推到回购站点,并使用post-receive钩子来检查你的推送到你的web服务器将要从哪里提供的文件夹中(如果需要,重新加载你的web服务器)。您还可以在您的设置文件中添加一个条件,检查应用程序是否在生产服务器上(例如,检查文件或环境变量)并加载相关设置(settings_prod.py或settings_dev.py) – elithrar 2012-08-06 10:23:01

+1

@elithrar这应该是回答。 – 2012-08-06 11:22:39

回答

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源代码管理,这可能不合适。结构可以在文本文件中找到并替换,或者可以使用a local_settings.py approach结合设置。

退房the Fabric tutorial,以填补空白(如指定为您的服务器连接的详细信息。一旦你设置,只需运行

fab deploy 

和过程应自动进行。

NB而不hg元数据创建从水银归档在一个步骤中与hg archive命令)

+0

到目前为止,hg档案已经帮助了我很多。这对于保持简单直到需要更复杂的解决方案来说非常好。 +1谢谢。 – Houman 2012-08-10 20:29:25

1

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

推到回购站并使用post-receive钩子检出您的推入到您的Web服务器将从其服务的文件夹(并在需要时重新加载您的Web服务器)。

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

+0

听起来有趣,我该如何创建这样的post-receive hook?谢谢 – Houman 2012-08-10 20:28:28

+0

@Kave请看这里:http://mercurial.selenic.com/wiki/Hook - 基本上你在项目的.hgrc文件中创建一个“钩子”,然后将它绑定到脚本(Python,Ruby,bash ; 随你)。剧本然后处理繁重的工作。例如,您可能会重新加载Web服务器,或者修改配置文件等。 – elithrar 2012-08-11 00:35:33

相关问题