===================================== Note su Flask ===================================== Appunti allo sviluppo per Django :Author: Andrea Manni :Copyright: GFDL :Version: 0.1 Questi appunti sono ad uso privato. .. sectnum:: .. contents:: Indice degli argomenti .. |date| date:: Generato il |date| con: http://docutils.sourceforge.net/rst.html 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 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 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 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. 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`` 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. 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. .. Note: Flask puo' essere usato con PyPy: 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. 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 Apache virtual server --------------------- /etc/apache2/sites-available/app.andreamanni.com :: 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 WSGIProcessGroup application WSGIApplicationGroup %{GLOBAL} # Auto reloading when changes to the code occur WSGIScriptReloading On Order deny,allow Allow from all # 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 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