如何使用chef在一个git存储库中部署两个django项目?

时间:2013-03-25 10:05:17

标签: django chef gunicorn cookbook

我有一个包含两个Django 1.5个项目的git存储库:一个用于网站,另一个用于REST API。 git存储库看起来像这样:

api_project/
www_project/
logs/
manage.py
my_app_1/
my_app_2/

manage.py文件默认为www_project.settings。要启动api_project,请运行:

DJANGO_SETTINGS_MODULE=api_project.settings ./manage.py shell

我想我可以设置3个git存储库,一个使用常见的应用程序,一个用于api项目,一个用于www项目,使用git子模块和所有,但它看起来有点矫枉过正。到目前为止,一切正常。

但现在我正在尝试使用Chef部署此设置。我想使用applicationapplication_python烹饪书,并使用gunicorn运行我的django项目,但这些烹饪书似乎只能一次部署一个项目。

这是我的厨师食谱对www_project的看法:

application "django_app" do
    path "/var/django"
    owner "django"
    group "django"
    repository "git.example.com:blabla"
    revision "master"
    migrate true
    packages ["libevent-dev", "libpq5" , "git"]
      # libevent-dev for gevent (for gunicorn), libpq5 for postgresql
    environment "DJANGO_SETTINGS_MODULE" => "www_project.settings"
      # for syncdb and migrate

    django do
        local_settings_file "www_project/settings.py"
        settings_template "settings.py.erb"
        purge_before_symlink ["logs"]
        symlinks "logs" => "logs"
        collectstatic true
        database do
            database "blabla"
            engine "postgresql_psycopg2"
            username "django"
            password "super!password"
        end
        database_master_role "blabla_postgresql_master"
        migration_command "/var/django/shared/env/bin/python manage.py" +
           " syncdb --noinput && /var/django/shared/env/bin/python" +
           " manage.py migrate"
    end

    gunicorn do
        app_module "www_project.wsgi:application"
        preload_app true
        worker_class "egg:gunicorn#gevent"
        workers node['cpu']['total'].to_i * 2 + 1
        port 8081
        proc_name "blabla_www"
    end
end

我想知道如何为api_project添加另一个gunicorn ressource。 有没有人遇到过类似的问题?你会建议修补我的application_python cookbook的本地副本,以允许在一个git仓库中的多个项目吗?或者我应该经历设置3个单独的git存储库的痛苦?还是其他任何解决方案?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以将代码分成两个独立的“应用程序”块,因为内部定义的所有资源都是子资源,而实际执行是在“应用程序”级别完成的。

另一种解决方案是对application_python提供程序django和gunicorn进行fork / patch以允许更复杂的行为,例如允许部署多个应用程序。虽然这么多用户可能不需要付出所有的努力和复杂性。