通过Fabric重新启动Gunicorn_django

时间:2013-05-22 10:51:05

标签: python django fabric gunicorn

我正在构建一个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: 

谁能看到我误入歧途的地方?

2 个答案:

答案 0 :(得分:2)

没有解决这个问题,但是我终于打了个盹,然后拿起了Supervisor。事实证明,Supervisor使用非常简单,感谢this blog post我能够很快解开它。只是想我发布这个以防万一其他人有同样的问题,并且在这个页面上发现了绊倒。

答案 1 :(得分:0)

我也面临着这个问题。我在杀戮和重新启动gunicorn进程之间等了几秒钟,现在似乎运行正常。

kill_running_gunicorn_process()
time.sleep(10)
start_gunicorn_process()