Pyramid en Google App Engine
Crearem un projecte Python: Pyramid framework per instal·lar-ho després al Google App Engine (GAE).
Contingut
Instal·lant la plantilla de projecte
Treballarem amb el Buildout i el scaffold de Pyramid per GAE.
OJU: no treballeu com a root. Aquest entorn (virtualenv) està pensat per no interferir en el sistema ni barrejar llibreries.
- Tutorial Pyramid amb Buildout per GAE: http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/deployment/gae_buildout.html
- Descarregueu A TOTA XUFA amb el PyPI mirror del departament.
Més coses interessants però per mirar-les després:
- Tutorial alternatiu Pyramid amb Buildout per GAE: https://github.com/jensens/pyramid-gae-tutorial
- Instal·lador PIP per Python (més modern que easy_install): http://www.pip-installer.org
- Caldrà crear un virtualenv
Seguint els passos d'aquest tutorial podem posar en marxa el nostre primer projecte.
OJU: poden aparèixer problemes de versions (al menys en Ubuntu 12.04) que cal arranjar del tutorial. La versió del pyramid_appengine (paquet amb la plantilla del buildout) no baixa en la seva darrera versió en algunes ocasions.
Troubleshooting
A data d'octubre de 2013 hi ha alguns conflictes de versions per posar en marxa un projecte de Pyramid GAE amb buildout.
Particularment el mòdul (egg) rod.recipe.appengine dóna l'error "setuptools not found".
Sol·lució actual (oct 2013)
- Descarregar la versió correcta del pyramid_appengine amb:
$ pip install pyramid_appengine==0.8.2-a2
- Forçar a descarregar la darrera versió de setuptools al fitxer versions.cfg:
[buildout]
setuptools = 1.1.7
He detectat altres problemes afegits que poden donar maldecaps. No està de més fer-li un cop d'ull a:
- Instal·lar el pip darrera versió de http://www.pip-installer.org (veure apartat install). Això no ens assegura, però que ens descarregui correctament la darrera versió de pyramid_appengine.
- Un cop creat el buildout, canviar la versió del appengine-sdk. Anar a buildout.cfg:
ae-sdk-version=1.8.5
- ...posant la darrera versió que trobem a la pàgina oficial de GAE.
Solucions anteriors però que no van ara:
- Seguir el tutorial fins realitzar el
$ bin/buildout
- ...ens donarà l'error "setuptools not found".
- Aplicar aquest patch al mòdul rod.recipe.appengine. Modificar l'arxiu:
$ gedit eggs/rod.recipe.appengine-2.0.2-py2.7.egg/rod/recipe/appengine/__init__.py
- Tornar a executar el buildout i arrencar el servidor normalment.
Creant views al projecte
Per veure com utilitzar Pyramid podeu llegir Pyramid: arquitectura.
Activant plantilles Mako
Si volem utilitzar les plantilles Mako (que són les que hem utilitzat des del principi) caldrà fer alguns ajustos al projecte generat:
$ bin/buildout -v
__init__.py
Afegirem a la funció make_app():
...
__here__ = os.path.dirname(os.path.abspath(__file__))
...
def make_app():
...
settings = {}
settings['mako.directories'] = os.path.join(__here__, 'templates')
config = Configurator( root_factory=Root, settings=settings )
...
# afegim la URL "/home" a la que accedim amb "http://localhost:8080/home"
config.add_route( "home", "/home" )
config.add_view( views.home_view, route_name="home", renderer="main.mako" )
# OJU: el config.scan() no li agrada al GAE!!
views.py
Afegirem les views pertinents:
# OJU: al GAE no li agraden els decorators @view_config !!!
def home_view( request ):
return {"project":"gapp1"}
templates/main.mako
<html>
<head>
<title>${project}</title>
</head>
<body>
<h1>Projecte ${project}</h1>
<p>Aviam que tal va aixo...</p>
</body>
</html>
Afegir plantilles
Quan afegim una nova plantilla .mako cal refer el projecte, ja que els arxius s'han de traslladar al directori "parts":
$ bin/buildout -v
Exercici 1: Zodíac
Farem una pàgina on puguem entrar la nostra data de naixement i que ens digui el signe del zodíac que ens correspon, amb imatges estupendes per fer-ho més cool.
Us recomano seguir les següents passes:
- Crear una pàgina "home" com s'indica anteriorment en aquest tutorial i titular el nostre projecte adequadament. Substituïu la pàgina per defecte del template (elimineu la original).
- Afegir les fotos dels signes del zodíac a la pàgina "home". Inicialment ho farem en la plantilla .mako com si fos un HTML normal.
- Els arxius de les fotos les heu de col·locar dins el subdirectori
static
- Els arxius de les fotos les heu de col·locar dins el subdirectori
- Canvieu el HTML del template per un bucle de la plantilla
mako
.- Des de la view cal que li passeu la llista, per exemple en la variable "imatges".
- Consulteu a http://www.makotemplates.org com funcionen els bucles de
mako
.
- ...