Webfaction.com 的 Django 部署过程

Django Deployment Process to Webfaction.com

尝试将我的 Django 应用程序的部署过程简化为 webfaction.com,我有一个主(工作副本)和一个开发分支。

目前我正在做以下事情:

  1. 在我的本地开发环境中更改我的开发分支
  2. 当更改生效时,使用 运行 本地服务器进行测试,然后与我的主分支合并
  3. git push 所以代码在我的远程仓库中(这还有其他问题,例如密码,密钥等我还没有完全解决)(我也不相信它可以将 scp 代码发送到webfaction,我不是我目前使用过的任何 FTP 服务的忠实粉丝)
  4. SSH 进入我的 webfaction 服务器并执行 git 拉取和 git 合并
  5. 测试一下是否一切正常(从来没有)
  6. 进行必要的更改以使一切恢复正常
  7. 提交我为修复所有问题而必须做的任何更改,然后推送回远程仓库
  8. 返回我的开发环境并将代码与生产代码同步
  9. 为下一个特征重复冲洗

显然我已经错过了高效的开发培训,作为记录,我只将 django 作为一个业余项目使用了几个月。

任何人都可以建议一个更有利于理智发展的 django 部署过程吗?

最佳最短路径

settings.py:

try:
  from production_settings import *
except ImportError as e:
  pass

您可以覆盖 production_settings.py 中需要的内容;它应该远离你的版本控制,你可以巧妙地使用 git。

我强烈建议 Fabric 处理您对 WebFaction 的部署: http://docs.fabfile.org/en/1.11/tutorial.html

通过使用 Fabric,您可以从本地终端部署代码和执行其他服务器端操作,而无需手动通过 ssh 连接到服务器。首先安装 Fabric:

pip install Fabric

在您的项目根文件夹中创建 fabfile.py。这是一个可以帮助您入门的示例 fabfile:

from fabric.api import task, env, run, cd
from fabric.context_managers import prefix

env.hosts = ('wf_username@wf_username.webfactional.com',)
env.forward_agent = True

MANAGEPY = '~/webapps/my_project/code/my_project/manage.py'
PY = '~/webapps/my_project/env/bin/python2.7'

@task
def deploy():
    with cd('~/webapps/my_project/code/'):
        with prefix('source production'):
            run('git pull --rebase origin master')
            run('pip install -r requirements.txt')
            run('{} {} migrate'.format(PY, MANAGEPY))
            run('{} {} collectstatic --noinput'.format(PY, MANAGEPY))
            run('touch my_project/my_project/wsgi.py')

您可以从您的终端 运行 fab 任务:

fab deploy

在我看来,直接在服务器上更改代码是一种不好的做法。 Fabric 可以改进您的开发流程,以便您仅在本地编辑代码、快速部署并测试它们。