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 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 setup.py come scritto sopra piuttosto che nel file buildout.cfg così che vengano correttamente ereditate da ogni altro progetto che dichiari questo come dipendenza. Le dipendenze espresse in 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 .hgignore, ed un tsettings.py che viene usato come default, sta a voi correggere a mano.

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

Lancia l’interprete Python dell’ambiente virtuale. Analogamente a dj, py chiama bin/py in ogni sotto cartella

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

Questa script permette di mostrare quali versione dei pacchetti sono incluse nell’ambiente virtuale.

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-fix-project

Questa piccola script permette di effettuare in modo semplice la transizione fra gli url dei repo precedenti a heptapod e quelli attuali.

È possibile sia invocarla senza argomenti da dentro il progetto:

cd office2020.thux.it
jmb-fix-project

Sia chiamando la scipt con tanti argomenti:

cd thux-sites
jmb-fix-project *

Di fatto la script trova il nome del progetto e chiede a heptapod via api il path completo. è possibile anche se molto raro che esistano 2 progetti con lo stesso nome, in questo caso viene semplicemente sollevato l’errore e deve esssere risolto a mano.

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

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=

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.

Nota

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

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…