Diferència entre revisions de la pàgina «Buildout»
Línia 38: | Línia 38: | ||
=== Entorn de producció === | === Entorn de producció === | ||
− | A l'entorn de producció caldrà afegir un enllaç amb WSGI. Per sort, no cal fer gran cosa perquè tenim un '' | + | A l'entorn de producció caldrà afegir un enllaç amb WSGI. Per sort, no cal fer gran cosa perquè tenim un ''recipe'' estàndard que ho resoldrà per nosaltres: el '''mywsgiapp'''. Una ''recipe'' és un ''plugin'' pel buildout, amb utilitats comunes que s'utiltizen sovint, com és el cas de l'enllaç amb WSGI. |
+ | |||
+ | Per més detalls dels recipe i una llista: http://www.buildout.org/docs/recipelist.html | ||
+ | |||
+ | El que ens interessa és el què correspon a la secció [mywsgiapp] del buildout.cfg de més avall: | ||
<syntaxhighlight lang="ini"> | <syntaxhighlight lang="ini"> |
Revisió del 17:21, 22 ago 2012
Buildout és un sistema que ens permet elaborar projectes sense dependre de les versions dels paquets instal·lats en el sistema.
http://www.buildout.org
Quan en un mateix servidor conviuen diferents serveis o sites, les versions de l'intèrpret i dels packages per executar els scripts pot variar, el què ens podria portar a incompatiblitats, ja que el sistema sovint no pot gestionar disposar diverses versions alhora.
La conclusió és què no és bo refiar-nos de les versions dels paquets instal·lats en el sistema i descarregar els paquets que requereixi el nostre projecte en el nostre directori particular, i fer ús d'aquests directament sense utiltizar els de sistema.
Al sistema convé tenir només l'intèrpret i prou (en el nostre cas Python), sense packages, o amb els mínims possibles. Aquests "mínims possibles" solen ser distribute, setuptools i virtualenv per Python.
De fet, en un entorn de desenvolupament podiem utiltizar virtualenv per solucionar aquest problema, però no pel sistema en producció.
Contingut
Buildout per Python-Pyramid
Anem a instal·lar el sistema de buildout per Pyhton i per un projecte Pyramid.
Pre-requisit: tenir Python al sistema. Millor sense cap package. Com que no es poden eliminar si no és "a mà", potser és més convenient fer una instal·larció neta del S.O. nostre servidor. Si es volen eliminar els python-eggs (packages) del sistema (en general instal·lats amb easy_install o pip), es pot intentar eliminar-los esborrant-los del seu directori:
Entorn de desenvolupament
El què anem a fer és per a l'entorn de desenvolupament. A l'entorn de producció no cal, ja que transferirem el buildout sencer (amb git o svn o per scp) un cop testejat:
- (opcional): instal·lar i posar a punt un virtualenv amb Pyramid
- Instal·lar el buildout: http://www.buildout.org/install.html (pas 2)
- Iniciar el projecte (pas 3)
- Descarregar el bootstrap.py (al final del pas 3)
- Crear carpeta "src" sota la qual posarem el projecte
$ mkdir src
- Anar dins la carpeta "src" i crear un projecte Pyramid: http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/project.html
- Traslladar els .ini del Pyramid a l'arrel del buildout.
- Anar a l'arrel del buildout i crear buildout.cfg. Utiltizeu l'exemple al final d'aquest tutorial.
- Construir el projecte:
$ python bootstrap.py $ bin/buildout -v
I ja podrem executar el nostre projecte Pyramid amb:
$ bin/pserve development.ini
Entorn de producció
A l'entorn de producció caldrà afegir un enllaç amb WSGI. Per sort, no cal fer gran cosa perquè tenim un recipe estàndard que ho resoldrà per nosaltres: el mywsgiapp. Una recipe és un plugin pel buildout, amb utilitats comunes que s'utiltizen sovint, com és el cas de l'enllaç amb WSGI.
Per més detalls dels recipe i una llista: http://www.buildout.org/docs/recipelist.html
El que ens interessa és el què correspon a la secció [mywsgiapp] del buildout.cfg de més avall:
[mywsgiapp]
recipe = collective.recipe.modwsgi
eggs = docpopservices
Paste
PasteDeploy
config-file = ${buildout:directory}/production.ini
Aquesta secció és innecessària a l'entorn de desenvolupament, tot i que es sol possar per testejar l'aplicació amb l'Apache.
Buildout per Pyramid
Exemple de buildout.cfg per Pyramid:
[buildout]
develop = src/myapp
parts =
mywsgiapp
omelette
pyramid
eggs-directory = eggs
eggs = myapp
[mywsgiapp]
recipe = collective.recipe.modwsgi
eggs = docpopservices
Paste
PasteDeploy
config-file = ${buildout:directory}/production.ini
[pyramid]
recipe = zc.recipe.egg
dependent-scripts = true
eggs =
pyramid
waitress
Paste
PasteDeploy
nose
WebTest
pyramid_debugtoolbar
myapp
interpreter = py
[omelette]
recipe = collective.recipe.omelette
eggs = ${pyramid:eggs}
Comentaris:
- ...
Més encara
Llista de ...TODO...:
- diversos eggs en un mateix buildout
packages=find_packages('src'), package_dir = {: 'src'},
- ...