2013-03-25 87 views
0

我有一個git倉庫,有兩個Django 1.5個項目:一個用於網站,另一個用於REST API。 Git倉庫看起來是這樣的:如何在主廚一個git倉庫中部署兩個django項目?

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 

我只是想知道如何添加其他gunicorn的ressource的api_project。 有沒有人遇到類似的問題?你會建議修補我的application_python cookbook的本地副本,以允許在一個git倉庫中的多個項目?或者我應該經歷設置3個獨立的git存儲庫的痛苦嗎?或者其他解決方案?

謝謝!

+1

過去面臨類似的情況。雖然這種情況下的每個解決方案都有其優點和缺點,但我推薦的方法是擁有單獨的存儲庫併爲常見的東西創建可插入的python包或django-app。 – Amyth 2013-03-25 11:16:22

+0

好吧,所以你推薦「3個git倉庫」路線。哦,我希望我能避免這種情況。感謝您的反饋意見。 – MiniQuark 2013-03-25 11:19:10

回答

0

您可以將代碼分成兩個單獨的「應用程序」塊,因爲裏面定義的所有資源都是子資源,而實際執行是在「應用程序」級別完成的。

另一種解決方案是fork/patch application_python提供程序django和gunicorn以允許更復雜的行爲,例如允許部署多個應用程序。儘管如此多的用戶可能不需要付出所有的努力和複雜性。