【问题标题】:How to deploy two django projects in one git repository with chef?如何使用 Chef 在一个 git 存储库中部署两个 django 项目?
【发布时间】:2013-03-25 10:05:17
【问题描述】:

我有一个 git 存储库,其中包含两个 Django 1.5 项目:一个用于网站,另一个用于 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 资源。 有没有人遇到过类似的问题?您是否建议修补我的 application_python 食谱的本地副本以允许多个项目在一个 git 存储库中?或者我应该经历建立 3 个独立的 git 存储库的痛苦吗?还是其他解决方案?

谢谢!

【问题讨论】:

  • 过去也遇到过类似的情况。尽管在这种情况下每个解决方案都有其优缺点,但我建议使用单独的存储库并为常见的东西创建一个可插入的 python 包或 django-app。
  • 好的,所以你推荐“3 git repositories”路线。哦,好吧,我希望我可以避免这种情况。感谢您的反馈。

标签: django chef-infra gunicorn cookbook


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 2010-09-30
    • 1970-01-01
    相关资源
    最近更新 更多