1   Note su Flask

Appunti allo sviluppo per Django

Author:Andrea Manni
Copyright:GFDL
Version:0.1

Questi appunti sono ad uso privato.

Generato il 2015-05-14 con: http://docutils.sourceforge.net/rst.html

1.1   Virtual env

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

1.1.1   Requirements list

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

1.1.2   Postgresql support: psycopg2

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
Poi all’interno del virtual-env si potra’ compilare il pacchetto psycopg2::
easy_install psycopg2

Per un test:

python
>>> import psycopg2

1.2   PyPy

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.

1.2.1   Installare PyPY

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

1.3   Dev Server

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.

1.4   Deployment su apache con WSGI

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.

1.4.1   Permessi

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.

1.4.2   Configurazione WSGI

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

1.4.3   Apache virtual server

/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>

1.5   Deployment su Gunicorn

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