Próbuję ustawić moją aplikację Flask na serwerze CentOS. Zasadniczo chodzi o to, że mam zainstalowany Python 2.6 w wersji /usr/bin
, który jest domyślny dla systemu, a Python 3.4 zainstalowany w /usr/local/bin
. Chciałbym użyć interpretera Python 3.4 virtualenv lub co najmniej Python 3.4 dla mod_wsgi do uruchomienia mojej aplikacji.Uruchom mod_wsgi z virtualenv lub Python z wersją inną niż domyślny system
Utworzono virtualenv w ~/virtualenvs/flask
.
mam ten skrypt WSGI:
import os
import sys
from logging import Formatter, FileHandler
APP_HOME = r"/home/fenikso/Album"
activate_this = os.path.join("/home/fenikso/virtualenvs/flask/bin/activate_this.py")
execfile(activate_this, dict(__file__=activate_this))
sys.path.insert(0, APP_HOME)
os.chdir(APP_HOME)
from app import app
handler = FileHandler("app.log")
handler.setFormatter(Formatter("[%(asctime)s | %(levelname)s] %(message)s"))
app.logger.addHandler(handler)
application = app
I po config Apache:
<VirtualHost *:80>
ServerName album2.site.cz
Alias /static "/home/fenikso/Album/static"
Alias /photos "/home/fenikso/Album/photos"
Alias /thumbs "/home/fenikso/Album/thumbs"
WSGIScriptAlias/"/home/fenikso/Album/wsgi.py"
<Directory "/home/fenikso/Album">
AllowOverride None
Allow from all
</Directory>
<Directory "/home/fenikso/Album/static">
AllowOverride None
Allow from all
</Directory>
<Directory "/home/fenikso/Album/photos">
AllowOverride None
Allow from all
</Directory>
<Directory "/home/fenikso/Album/thumbs">
AllowOverride None
Allow from all
</Directory>
</VirtualHost>
Jednak gdy próbuje uruchomić aplikację, pojawia się błąd:
Apache/2.2.15 (Unix) DAV/2 mod_wsgi/3.2 Python/2.6.6 mod_fcgid/2.3.7 PHP/5.3.3 mod_ssl/2.2.15 OpenSSL/1.0.1e-fips SVN/1.6.11 mod_perl/2.0.4 Perl/v5.10.1 configured -- resuming normal operations
mod_wsgi (pid=14627): Target WSGI script '/home/fenikso/Album/wsgi.py' cannot be loaded as Python module.
mod_wsgi (pid=14627): Exception occurred processing WSGI script '/home/fenikso/Album/wsgi.py'.
Traceback (most recent call last):
File "/home/fenikso/Album/wsgi.py", line 15, in <module>
from app import app
File "/home/fenikso/Album/app.py", line 1, in <module>
from flask import Flask
ImportError: No module named flask
Zauważyłem, że uruchamiany jest Python 2.6, a mój virtualenv nie jest aktywowany. Jaki byłby właściwy sposób, aby to działało i nadal ma Python 2.6 jako domyślny system?
Myślę, że to jest właściwa droga. Jednak nie udało mi się sprawić, by działało w moim środowisku. Zbyt wiele rzeczy połamanych i brudnych, więc zrezygnowałem i spróbowałem w inny sposób. – Fenikso
Jednak nie powinno się 'WSGIPythonHome' i' WSGIPythonPath' być na zewnątrz ''? –
Fenikso
Masz całkowitą rację, te opcje muszą znajdować się poza blokiem ''. Mój błąd.Jeśli musisz użyć innego virtualenv dla każdego '' możesz użyć dyrektyw 'WSGIDaemonProcess' i' WSGIProcessGroup', ustawiając opcję 'python-path'. –
afrancais