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 2024-01-27 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