Webfaction.com 的 Django 部署过程
Django Deployment Process to Webfaction.com
尝试将我的 Django 应用程序的部署过程简化为 webfaction.com,我有一个主(工作副本)和一个开发分支。
目前我正在做以下事情:
- 在我的本地开发环境中更改我的开发分支
- 当更改生效时,使用 运行 本地服务器进行测试,然后与我的主分支合并
- git push 所以代码在我的远程仓库中(这还有其他问题,例如密码,密钥等我还没有完全解决)(我也不相信它可以将 scp 代码发送到webfaction,我不是我目前使用过的任何 FTP 服务的忠实粉丝)
- SSH 进入我的 webfaction 服务器并执行 git 拉取和 git 合并
- 测试一下是否一切正常(从来没有)
- 进行必要的更改以使一切恢复正常
- 提交我为修复所有问题而必须做的任何更改,然后推送回远程仓库
- 返回我的开发环境并将代码与生产代码同步
- 为下一个特征重复冲洗
显然我已经错过了高效的开发培训,作为记录,我只将 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 可以改进您的开发流程,以便您仅在本地编辑代码、快速部署并测试它们。
尝试将我的 Django 应用程序的部署过程简化为 webfaction.com,我有一个主(工作副本)和一个开发分支。
目前我正在做以下事情:
- 在我的本地开发环境中更改我的开发分支
- 当更改生效时,使用 运行 本地服务器进行测试,然后与我的主分支合并
- git push 所以代码在我的远程仓库中(这还有其他问题,例如密码,密钥等我还没有完全解决)(我也不相信它可以将 scp 代码发送到webfaction,我不是我目前使用过的任何 FTP 服务的忠实粉丝)
- SSH 进入我的 webfaction 服务器并执行 git 拉取和 git 合并
- 测试一下是否一切正常(从来没有)
- 进行必要的更改以使一切恢复正常
- 提交我为修复所有问题而必须做的任何更改,然后推送回远程仓库
- 返回我的开发环境并将代码与生产代码同步
- 为下一个特征重复冲洗
显然我已经错过了高效的开发培训,作为记录,我只将 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 可以改进您的开发流程,以便您仅在本地编辑代码、快速部署并测试它们。