Appunti allo sviluppo per Django
Author: Andrea Manni Copyright: GFDL Version: 0.1
Questi appunti sono ad uso privato.
Indice degli argomenti
Generato il 2015-05-14 con: http://docutils.sourceforge.net/rst.html
Per una installazione ‘pulita’ mainstream in un virtual enviroment:
mkdir site
cd site/
virtualenv env
. env/bin/activate
easy_install flask
mkdir templates static
Se per attviare un env si usa:
. env/bin/activate
source env/bin/activate
Per disattivarlo:
deactivate
Per generare una list they requirements del virtual env (o del sistema operativo senza il -E o se non si e’ attviato il virtual env):
pip -E env/ packages_list
# Esempio
Django==1.2.3
Flask==0.8
Jinja2==2.5.5
MarkupSafe==0.9.2
PIL==1.1.7
Pygments==1.3.1
Sphinx==0.6.6
Werkzeug==0.8.2
chardet==2.0.1
distribute==0.6.10
docutils==0.7
iotop==0.4
lxml==2.2.8
pysqlite==1.0.1
virtualenv==1.4.9
wsgiref==0.1.2
Per installare i pacchetti in base alla lista generata:
pip -E env/ install -r packages_list
Per poter usare Postgresql in un virtualenv occorre compilare il supporto psycopg2 all’interno del virtualenv. Si proceda installando nel sistema operativ o i pacchetti:
apt-get install python-dev libpq-dev
Per un test:
python
>>> import psycopg2
Flask sembra girare bene su PyPY, per utilizzarlo creare il virtual env precisando la opzione -p per l’interprete:
virtualenv -p /root/pypy/pypy-1.7/bin/pypy env
Note
PyPy viene anche esso scaricato manualmente, non richiede di essere installato.
Evitare la versine pacchettizata, tenere come per flask l’ultima versione upstream:
mkdir pypy
cd pypy/
wget https://bitbucket.org/pypy/pypy/downloads/pypy-1.7-linux64.tar.bz2
tar -jxf pypy-1.7-linux64.tar.bz2
cd /usr/bin/
ln -s /root/pypy/pypy-1.7/bin/pypy ./
Hint
Per vedere se l’OS e’ a 64bit o 32 fare un file /bin/ls
Per i test in locale si puo usare, alla fine del file principale:
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8888, debug=True)
Senza i parametri passati viene attivato un web server su http://localhost:5000 Debug abilita l’auto reload del framework ad ogni modifica.
Deployment di una app realizzata con virtual-env:
/home/eaman/flasks/app
|-- env
`-- site
|-- app.py
|-- app.pyc
|-- app.wsgi
|-- static
`-- templates
Non mettere l’app in /var/www/ se questa e’ visibile ed esplorabile.
Assicurarsi che la app sia di proprieta’ di www-data, o di un utente / gruppo adatto. Se c’e’ un DB Sqlite assicurarsi che l’intera directory contenente il DB sia scrivibile dall’utente del processo web.
app.wsgi:
# Activate the virtual env:
activate_this = '/home/eaman/flasks/app/env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
# Add the app to the python path:
import sys
sys.path.insert(0, '/home/eaman/flasks/app/site')
# Load the app
from app import app as application
/etc/apache2/sites-available/app.andreamanni.com
<VirtualHost *:80>
ServerAdmin webmaster@andreamanni.com
ServerName app.andreamanni.com
WSGIDaemonProcess application user=www-data group=www-data threads=5
WSGIScriptAlias / /home/eaman/flasks/app/site/app.wsgi
<Directory /home/eaman/flasks/app/site/app.wsgi>
WSGIProcessGroup application
WSGIApplicationGroup %{GLOBAL}
# Auto reloading when changes to the code occur
WSGIScriptReloading On
Order deny,allow
Allow from all
</Directory>
# Logs
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
</VirtualHost>
Gunicorn e’ un Server HTTP WSGI compatibile che supporta sia Flask che Django. E’ estremamente leggero e funziona anche questo con PyPY.
. bin/activate
easy_install gunicorn
gunicorn -w 4 app_file:app