我正在构建一个 Django 应用程序,我决定研究 Fabric 以实现自动化部署。我已经让它大部分工作了,但在最后一步失败了,我似乎无法弄清楚为什么。
我正在使用 Nginx 和 Gunicorn 来为应用程序提供服务,并且我想在引入更改并更新数据库后杀死并重新启动 Gunicorn。不幸的是,它似乎总是在最后一关失败。
最后的命令没有响应任何类型的错误,但应用程序没有得到服务,如果我 SSH 没有它的进程,我必须手动重新启动它。每个其他命令都可以完美运行。
我的 fabfile.py:
#!/usr/bin/env python
from fabric.api import local, env, run
from fabric.context_managers import cd, prefix
env.hosts = ['192.168.1.1']
env.path = "/home/matthew/Sites/projectname"
def deploy():
# Push changes to Bitbucket
local('git push origin master')
# Switch to project directory
with cd(env.path):
# Pull changes to server
run('git pull origin master')
# Activate virtualenv
with prefix('source venv/bin/activate'):
# Collect static files
run('python manage.py collectstatic --noinput')
# Sync and migrate the database
run('python manage.py syncdb')
run('python manage.py migrate')
# Kill and restart Gunicorn
run('killall gunicorn_django || true')
run('gunicorn_django -D -c gunicorn.conf.py')
如果我删除 -D 标志使其不被守护,它可以工作并且我得到以下输出,但我必须使用 Ctrl-C 手动断开连接。如果我将 & 附加到末尾,它将停止工作:
[192.168.1.1] out: 2013-05-22 12:47:51 [60549] [INFO] Starting gunicorn 0.17.4
[192.168.1.1] out: 2013-05-22 12:47:51 [60549] [INFO] Listening at: http://127.0.0.1:8888 (60549)
[192.168.1.1] out: 2013-05-22 12:47:51 [60549] [INFO] Using worker: sync
[192.168.1.1] out: 2013-05-22 12:47:51 [60554] [INFO] Booting worker with pid: 60554
[192.168.1.1] out: 2013-05-22 12:47:51 [60555] [INFO] Booting worker with pid: 60555
[192.168.1.1] out: 2013-05-22 12:47:51 [60556] [INFO] Booting worker with pid: 60556
[192.168.1.1] out:
谁能看到我误入歧途的地方?