zastosowanie buildout przy wdrażaniu projektów opartych o framework django

30
Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django Dominik Szopa http://dominno.pl PyCon PL 2009 16-18 październik 2009

Upload: dominik-szopa

Post on 04-Jul-2015

1.335 views

Category:

Design


5 download

TRANSCRIPT

Page 1: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Zastosowanie buildout przy wdrażaniu projektów opartych o

framework DjangoDominik Szopa

http://dominno.pl

PyCon PL 200916-18 październik 2009

Page 2: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Agenda

• Django - wdrażanie projektów, • Virtualenv i Buildout, • Buildout i Django,• Podsumowanie,• Przydatne linki.

   

Page 3: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Django - wdrażanie projektów

Każdy projekt składa się z wielu zależności: • Django, • Aplikacje zewnętrzne(np. django-tagging),• Biblioteki(np. docutils, beautyfullsoap).

  

Page 4: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Django - wdrażanie projektów

Zależności mogą być instalowane z wielu źródeł:

• Systemu kontroli wersji,• Używając setup.py,• Używając setuptools i easy_install.

Page 5: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Django - wdrażanie projektów

Wielokrotna instalacja i konfiguracja na:• Komputerach developerów,• Serwerze,• Wszystkich innych maszynach które mają coś

wspólnego z developmentem.  

Page 6: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Django - wdrażanie projektów

Złe praktyki:  • Instalacja zależności w systemowym site-packages,• Umieszczanie projektu wraz z pakietami zależnymi w

katalogach, które nie są zdefiniowane w PYTHONPATH. Mogą prowadzić w rezultacie do:

Page 7: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Page 8: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Rozwiązanie ? Virtualenv i Buildout

Page 9: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Co to jest virtualenv ?

• Tworzy odseparowane, niezależne środowisko Pythona,

• Odizolowuje pakiety od systemowego site-packages.

$ virtualenv moj_env$ source bin/activate  (moj_env) $ cd jakas_biblioteka(moj_env) $ setup.py install(moj_env) $ deactivate 

Page 10: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Wady virtualenv

• Nie rozwiązuje problemu ręcznej instalacji pakietów,• Środowiska nie są przenośne,• Środowiska nie są portowalne.

Page 11: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Co to jest buildout ?

• Automatyzuje instalacje zależności projektu,• Projekt składa się z poszczególnych składników,

definiowanych w pliku konfiguracyjnym,• Do konfiguracji oraz instalacji określonego składnika,

używane są rozszerzenia zwane "recipes" (przepisy), • Każdy składnik zawiera informacje skąd pobrać dane oraz

gdzie je zapisać.

Page 12: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Istnieją przepisy które:

• Pobierają pakiety i instalują je w formie eggów,• Pobierają źródła z systemu kontroli wersji,• Tworzą symlinki,• Wykonują polecenia systemowe,• Pobierają i kompilują pakiety binarne,• Więcej na http://pypi.python.org, 160+ dostępnych.

 

Page 13: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Buildout - przykład

[buildout] parts = part1 part2

 [part1]    recipe = moj_przepis

 [part2]

    recipe = moj_inny_przepis

$ buildout          PyPi               moje repo

                 mój desktop

$ python>>> import part1>>> import part2

Page 14: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Buildout i Django

Istnieje przepis "djangorecipe" dla Django który:

• pobiera i instaluje Django w wskazanej wersji,• tworzy skrypt-nakładkę na manage.py w którym są wpisane

ścieżki do wszystkich zainstalowanych zależności przez Buildout.

Page 15: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Buildout i Django - w szczegółach

Page 16: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Co będzie potrzebne

• Python,• virtualenv,• bootstrap.py  z

http://svn.zope.org/*checkout*/zc.buildout/trunk/bootstrap/bootstrap.py,

• terminal.

Page 17: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Tworzenie środowiska

$ virtualenv moje_srodowisko –-no-site-packages  $ cd moje_srodowisko

$ source bin/activate (moje_srodowisko)~/moje_srodowisko$   

Page 18: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Wdrażanie Django z Buildout

$ mkdir app $ cd app $ wget

http://svn.zope.org/*checkout*/zc.buildout/trunk/bootstrap/bootstrap.py 

$ touch buildout.cfg

Page 19: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Konfiguracja Buildout dla Django 

# buildout.cfg  [buildout]  parts = django  [django] recipe = djangorecipe version = 1.1     

  

Page 20: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Rozruch Buildout'a

$ python bootstrap.py    Creating directory 'moje_srodowisko/app/bin'.    Creating directory 'moje_srodowisko/app/parts'.    Creating directory 'moje_srodowisko/app/eggs'.    Creating directory 'moje_srodowisko/app/develop-eggs'.    Generated script 'moje_srodowisko/app/bin/buildout'.

       

Page 21: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Instalacja Django

$ bin/buildout     Getting distribution for 'djangorecipe'.     Got djangorecipe 0.19.1.     Getting distribution for 'zc.recipe.egg'.     Got zc.recipe.egg 1.2.2.     Installing django.     django: Downloading Django from: http://www.djangoproject.com/download/1.0/tarball/     Generated script 'moje_srodowisko/app/bin/django'.

  

Page 22: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Uruchomienie aplikacji

• bin/django runserver• bin/django syncdb• itd.

#!/moje_srodowisko/bin/python

import syssys.path[0:0] = [  '/moje_srodowisko/app/parts/moj_pakiet1',  '/moje_srodowisko/app/parts/moj_pakiet2',  ]

import djangorecipe.manage

if __name__ == '__main__':    djangorecipe.manage.main('moj_projekt.settings')

Page 23: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Jak wdrożyć swój projekt

# buildout.cfg [buildout] 

parts = django moj_projekt [django] recipe = djangorecipeversion = 1.1    settings = settingsprojectegg = moj_projekt ..

.

Page 24: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Jak wdrożyć swój projekt# buildout.cfg ..

eggs =        south         django-registration extra-paths =         ${buildout:parts-directory}   

[moj_projekt] recipe = iw.recipe.subversion urls =     http://moje_repo.com/trunk/moj_projekt_z_svn/ .

Page 25: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Jak wdrożyć swój projekt

$ bin/buildout         .    .

    Installing moj_projekt.     A    moje_srodowisko/app/parts/moj_projekt/settings.py

    .     .     Checked out revision 1.     Creating archive: .-dev.tar.gz

Page 26: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

mod_wsgi ? fcgi ?

djangorecipe umożliwia generowanie skryptów WSGI oraz FCGI

•  opcja: wsgi = true lub,•  opcja: fcgi = true.

   

./bin/django.wsgi

./bin/django.fcgi

Page 27: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Podsumowanie

• Buildout automatyzuje wdrożenia projektu, • Virtualenv odizolowuje pakiety od systemowego site-

packages, • djangorecipe umożliwia generowanie skryptów

rozruchowych dla WSGI i FCGI,

Page 28: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Przydatne linki

• http://www.buildout.org • http://pypi.python.org/pypi/zc.buildout • http://pypi.python.org/pypi/djangorecipe/ • http://www.sixfeetup.com/swag/buildout-quick-reference-card• http://www.doughellmann.com/projects/virtualenvwrapper/

Page 29: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Dziękuję za uwagę!

Page 30: Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Bibliografia - media

• http://farm4.static.flickr.com/3237/2796908072_63dbb1e52d_o_d.jpg • http://farm3.static.flickr.com/2599/3920111676_b69ce1138d_b_d.jpg • http://farm1.static.flickr.com/6/86227485_2bd48ad7f6_o_d.jpg• ikony: http://graffletopia.com/stencils/144