Vedi qualcosa di sbagliato con il mio tentativo di ottenere Flask in esecuzione? (Mod_wsgi + virtualenv)
-
08-10-2019 - |
Domanda
Ho un VPS in esecuzione di una nuova installazione di Ubuntu 10.04 LTS. Sto cercando di creare un'applicazione dal vivo utilizzando il microframework Flask, ma mi sta dando problemi. Ho preso appunti mentre ho cercato di farlo funzionare ed ecco la mia play-by-play, nel tentativo di individuare esattamente dove ho sbagliato.
Installazione
http://flask.pocoo.org/docs/installation/#installation
$ adduser myapp
$ sudo apt-get install python-setuptools
$ sudo easy_install pip
$ sudo pip install virtualenv
/home/myapp/
-- www/
$ sudo pip install virtualenv
/home/myapp/
-- www/
-- env/
$ . env/bin/activate
$ easy_install Flask
mod_wsgi
http://flask.pocoo.org/docs/deploying/mod_wsgi/
$ sudo apt-get install apache2
$ sudo apt-get install libapache2-mod-wsgi
La creazione di file WSGI
$ nano /home/myapp/www/myapp.wsgi
--myapp.wsgi contents:--------------------------
activate_this = '/home/myapp/env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
from myapp import app as application
/home/myapp/
-- www/
-- myapp.wsgi
-- env/
Configurazione di Apache
$ nano /etc/apache2/sites-available/myapp.com
-----myapp.com file contents ---------------------
<VirtualHost *:80>
ServerName myapp.com
WSGIDaemonProcess myapp user=myapp group=myapp threads=5 python-path=/home/myapp/env/lib/python2.6/site-packages
WSGIScriptAlias / /home/myapp/www/myapp.wsgi
<Directory /home/myapp/www>
WSGIProcessGroup myapp
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
Attiva il file host virtuale Ho appena creato
$ cd /etc/apache2/sites-enabled
$ ln -s ../sites-available/myapp.com
Riavviare Apache
$ /etc/init.d/apache2 restart
Server me una pagina di errore 500 del server. Ecco l'ultima log degli errori:
mod_wsgi (pid=3514): Target WSGI script '/home/myapp/www/myapp.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=3514): Exception occurred processing WSGI script '/home/myapp/www/myapp.wsgi'.
Traceback (most recent call last):
File "/home/myapp/www/myapp.wsgi", line 4, in <module>
from myapp import app as application
ImportError: No module named myapp
Gli errori alludono che si tratta di qualcosa di straordinariamente ovvio, ma sono abbastanza perso.
Soluzione
Ovviamente, non si riesce a trovare il pacchetto "myapp
". Si dovrebbe aggiungere al percorso nel file myapp.wsgi
in questo modo:
import sys
sys.path.append(DIRECTORY_WHERE_YOUR_PACKAGE_IS_LOCATED)
from myapp import app
Inoltre, se il modulo myapp
è un pacchetto, si dovrebbe mettere il file e __init__.py
vuoto nella sua directory.
Altri suggerimenti
Modifica linea sys.path.append
, ha bisogno di essere una stringa.
import sys
sys.path.append('directory/where/package/is/located')
Avviso le virgolette singole.