.. _buildout-utilities: =============== Utilities =============== Tutte le utility che presento qui hanno un'opzione ``-h`` per l'help. Non mi soffermo molto sulle cose utili a me che curo il deploy, ma solo a quello che serve agli sviluppatori... tanto non leggete neanche quando ve lo chiedo esplicitamente (questo è uno sporco trucco per capire se leggete..., non cascateci) .. _jmb-start: jmb kick ========= Per rendere più facile ed immediato partire con un nuovo progetto, ed in attesa di creare un vero sistema di templating, ho creato una semplice script che prende un mini-template per un progetto ed inserisce già la configurazione per ``buildout.cfg``, ``setup.py``, ``MANIFEST.in`` ed una intera struttura. Per un progetto sarà:: jmb kick cms -vbm nome-progetto o alternativamente per una app:: jmb kick japp jmb.miapp es:: jmb kick japp jmb.timereport Volendo aggiungere la struttura buildout ad un progetto esistente è possibile usare l'opzione ``-e``, questa sovrascrive i file esistenti (che sono sicuramente sotto controllo di versione), rendendo immediato capire cosa va fatto per aggiornare il progetto/applicazione esistente all'ultma versione del relativo template È importante scrivere le dipendenze per ogni project/application direttamente nel :file:`setup.py` come scritto sopra piuttosto che nel file :file:`buildout.cfg` così che vengano correttamente ereditate da ogni altro progetto che dichiari questo come dipendenza. Le dipendenze espresse in :file:`buildout.cfg` devono servire o per integrare pacchetti di terze parti non ben configurate (es.: manca dipendenza da PIL in ``sorl-thunmbnail``) o per imporre una determinata versione, nel qual caso occorre usare la sezione ``[versions]``:: [versions] Django == 1.11.11 ``jmb-start`` copia anche una versione di :file:`.hgignore`, ed un tsettings.py che viene usato come default, sta a voi correggere a mano. .. _dj: dj == il comando di gran lunga più utilizzato sarà ``bin/django`` che è l'equivalente di ``manage.py``. Con lo script ``dj`` sarà possibile chiamarlo anche da sottocartelle del progetto nel modo corretto. Senza argomenti è equivalente a ``bin/django shell``. La documentazione può essere prodotta da:: dj docs e può essere uploadata sul sito ufficiale_ con:: dj -u docs # nota l'opzione prima del pacchetto!!! Leggere l'help prodotto da ``dj -h`` per ulteriori scorciatoie. .. _py: py == Lancia l'interprete Python dell'ambiente virtuale. Analogamente a ``dj``, ``py`` chiama bin/py in ogni sotto cartella .. _ipy: ipy === Lancia l'interprete IPython dell'ambiente virtuale. Utile quando ``dj`` non parte per problemi di configurazione di ``django``. Analogamente a ``dj``, ``ipy`` chiama bin/py in ogni sotto cartella .. _jmb-test-setup: jmb-test-setup =============== Questa script permette di mostrare quali versione dei pacchetti sono incluse nell'ambiente virtuale. .. _jmb-prepare: jmb-prepare =========== Questa script permette di testare una aspetto della configurazione che può facilmente sfuggire: che siano inclusi nella distribuzione i file di dati, ovvero quelli che non sono moduli python: css, html, png, js, txt. Crea una distribuzione binaria e controlla quali file vengono effettivamente inclusi. I file inclusi sono controllati da MANIFEST.in e dalla apposita funzione get_data_files in setup.py. Le opzioni -m e -b permettono di creare la distro binaria e sorgente e di metterla nella cache di buildout (vedi help):: jmb-prepare -m # crea .tar.gz nella cache locale jmb-prepare -u # carica in pypi.thundersystems.it (via ssh) jmb-prepare -b # crea egg per locale .. _jmb-go: jmb-go ====== Questa banale script esegue una serie di piccole operazioni che portano il repo appena clonato o generato a funzionare:: dj migrate --all dj createsuperuser --username $SUPERUSER --email $EMAIL dj collectstatic --noinput $LINK .. _jmb-sync: jmb-sync ======== Questa script permette di sincronizzare un db remoto in uno locale facendo un dump del remoto, un eventuale dump del locale ed usando rsync fra i due, in questo modo è estremamente efficace. Si basa su un file di configurazione (``.sync``) nella cartella del progetto e NON legge la configurazione dai settings di django ed opera solo via ssh (quindi è necessario avere la chiave di root sulla macchina remota). È in grado di instaurare un tunnel ssh in modo da sincronizzare anche db dietro firewall. Potete generare una configurazione funzionante semplicemente con:: jmb-syn -c è possibile committare la configurazione ``.sync`` in mercurial e creare invece una configurazione minimalista ``.sync.local`` che contenga ad esempio:: LOCAL_CLUSTER=10/main LOCAL_DB_NAME=db_name LOCAL_DB_USER= .. _jmb-deps: Documentazione =============== La documentazione sta in docs. Nella configurazione standard viene automaticamente creata ``bin/docs`` una script che genera la documentazione e rigenera docs/Makefile in modo che punti ai file corretti con l'ambiente corretto. .. note:: al momento viene creata con un nome errato per la variabile ``DJANGO_SETTINGS_MODULE``. Per le apps occorre lasciare solo ``tsettings``. Può essere chiamato semplicemente con:: dj docs Per le application occorre dichiarare come settings: tsettings nella sezione [django] ed aggiungere:: absolute_path = True È possibile fare l'upload in http://docs.thux.it semplicemete aggiungendo l'opzione -u ``dj -u docs`` Test ====== i test per le application stanno in nome_application/tests/__init__.py e possono essere lanciati con:: dj t equivalente a ``python manage.py test``. .. _troubleshooting: Troubleshooting ================ Esistono alcuni problemi tipici quando si crea un ambiente con buildout. Vediamo di capirli e di capire come risolverli: todo, la sezione precedente riporta problemi risolti... .. _ufficiale: http://docs.thux.it .. _djangorecipe: http://pypi.python.org/pypi/djangorecipe/1.3 .. _bootstrap.py: http://downloads.buildout.org/1/bootstrap.py