Ich habe eine Flask-Web-App entwickelt, die gut läuft, wenn ich die Python-Kommandozeile direkt benutze. Wenn ich jedoch mit mod-wsgi auf Apache2 verteilt habe, kann es seine internen Module nicht importieren. Ich habe alle relevanten Beiträge gelesen, die meinen ähnlich sind, aber ich konnte das Problem noch nicht herausfinden. Zuerst versuchte ich alle unten:Meine Apache WSGI Flask Web-App kann ihr internes Python-Modul nicht importieren
1 - Stellen Sie sicher, dass alle Dateien und Unterordner unter dem Anwendungsordner RWX-Berechtigung für www-Daten ("das Apache2 Dienstkonto") haben.
2 - Der Modulpfad zur Apache-Konfigurationsdatei wurde hinzugefügt mit: WSGIPythonPath/var/www/FlaskApp/FlaskApp/Base /:/var/www/FlaskApp/FlaskApp/Base/Form /:/var/www/FlaskApp/FlaskApp/Base/Model/(siehe unten :)
3 - Der Modulpfad zur Variable sys.path im wsgi-Skript hinzugefügt.
#!/usr/bin/python
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/FlaskApp/")
sys.path.append('/var/www/FlaskApp/FlaskApp/Base/')
sys.path.append('/var/www/FlaskApp/FlaskApp/Base/Form/')
sys.path.append('/var/www/FlaskApp/FlaskApp/Base/Model/')
from FlaskApp import app as application
application.secret_key = 'as345kj34h5kljj34sy'
Alle meine interne Importe sind in init Py, die die Anwendung startet wie unten:
# internal imports
import Base.Model as Model
from Base import Constant as cnst
from Base.Form import UserRegistrationForm, ProductForm
.
.
.
if __name__ == "__main__":
app.run()
Ich habe gerade keine andere Idee, was sonst könnte ich vielleicht verpasst haben. Auch hier funktioniert alles einwandfrei, wenn Sie den Python-Interpreter über die Befehlszeile verwenden.
Sie helfen ist VIEL VIEL schätzen es.
Grüße, Mehdi/Mike
Error.log
[Fri Sep 09 22:59:43.068802 2016] [mpm_event:notice] [pid 10719:tid 139878768617344] AH00489: Apache/2.4.7 (Ubuntu) mod_wsgi/3.4 Python/2.7.6 configured -- resuming normal operations
[Fri Sep 09 22:59:43.068872 2016] [core:notice] [pid 10719:tid 139878768617344] AH00094: Command line: '/usr/sbin/apache2'
[Fri Sep 09 22:59:47.926252 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866] mod_wsgi (pid=10720): Target WSGI script '/var/www/FlaskApp/flaskapp.wsgi' cannot be loaded as Python module.
[Fri Sep 09 22:59:47.926300 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866] mod_wsgi (pid=10720): Exception occurred processing WSGI script '/var/www/FlaskApp/flaskapp.wsgi'.
[Fri Sep 09 22:59:47.926325 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866] Traceback (most recent call last):
[Fri Sep 09 22:59:47.926343 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866] File "/var/www/FlaskApp/flaskapp.wsgi", line 10, in <module>
[Fri Sep 09 22:59:47.926403 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866] from FlaskApp import app as application
[Fri Sep 09 22:59:47.926414 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866] File "/var/www/FlaskApp/FlaskApp/__init__.py", line 22, in <module>
[Fri Sep 09 22:59:47.926848 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866] from Base.Form import UserRegistrationForm, ProductForm
[Fri Sep 09 22:59:47.926889 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866] File "/var/www/FlaskApp/FlaskApp/Base/Form/__init__.py", line 1, in <module>
[Fri Sep 09 22:59:47.926975 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866] from UserRegistrationForm import UserRegistrationForm
[Fri Sep 09 22:59:47.927007 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866] File "/var/www/FlaskApp/FlaskApp/Base/Form/UserRegistrationForm.py", line 2, in <module>
[Fri Sep 09 22:59:47.927098 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866] from Base.Model import db_session, User
[Fri Sep 09 22:59:47.927156 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866] ImportError: No module named Base.Model
flaskapp.wsgi
#!/usr/bin/python
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/FlaskApp/")
sys.path.append('/var/www/FlaskApp/FlaskApp/Base/')
sys.path.append('/var/www/FlaskApp/FlaskApp/Base/Form/')
sys.path.append('/var/www/FlaskApp/FlaskApp/Base/Model/')
from FlaskApp import app as application
application.secret_key = 'as345kj34h5kljj34sy'
FlaskApp.conf
WSGIPythonPath /var/www/FlaskApp/FlaskApp/Base/:/var/www/FlaskApp/FlaskApp/Base/Form/:/var/www/FlaskApp/FlaskApp/Base/Model/
<VirtualHost *:80>
ServerName localhost
ServerAdmin [email protected]
WSGIScriptAlias//var/www/FlaskApp/flaskapp.wsgi
<Directory /var/www/FlaskApp/FlaskApp/>
Order allow,deny
Allow from all
</Directory>
Alias /static /var/www/FlaskApp/FlaskApp/static
<Directory /var/www/FlaskApp/FlaskApp/static/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
High-Level-Kommentare :) Ich mag sie viel, es wird irgendwann dauern, um jedes Detail davon zu verstehen. Aber jetzt scheint es, dass ich Probleme mit DB Access Threading habe. Anscheinend ist sqlite3 nicht mit Multi-Threading kompatibel. Hier ist ein Fehlerprotokoll. [Sat Sep 10 02: 09: 17.767883 2016] [: Fehler] [pid 11618: tid 140582090196736] ProgrammingError: (sqlite3.ProgrammingError) In einem Thread erstellte SQLite-Objekte können nur in demselben Thread verwendet werden. Das Objekt wurde in thread erstellt ID 140582190909184 und das ist Thread ID 140582090196736 – user1941390
Vielen Dank für die Korrektur. Und ich fand meine Antwort [hier] (http://stackoverflow.com/questions/34009296/using-sqlalchemy-session-from-flask-raises-sqlite-objects-created-in-a-thread-c). – user1941390