我正在构建一个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:
谁能看到我误入歧途的地方?
答案 0 :(得分:2)
没有解决这个问题,但是我终于打了个盹,然后拿起了Supervisor。事实证明,Supervisor使用非常简单,感谢this blog post我能够很快解开它。只是想我发布这个以防万一其他人有同样的问题,并且在这个页面上发现了绊倒。
答案 1 :(得分:0)
我也面临着这个问题。我在杀戮和重新启动gunicorn进程之间等了几秒钟,现在似乎运行正常。
kill_running_gunicorn_process()
time.sleep(10)
start_gunicorn_process()