2016-09-09 2 views
1

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> 

Antwort

1

Statt:

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> 

Versuchen Sie es mit:

<VirtualHost *:80> 
    ServerName localhost 
    ServerAdmin [email protected] 
    WSGIDaemonProcess myapp python-path=/var/www/FlaskApp/FlaskApp 
    WSGIScriptAlias//var/www/FlaskApp/flaskapp.wsgi process-group=myapp application-group=%{GLOBAL} 
    <Directory /var/www/FlaskApp> 
    <Files flaskapp.wsgi> 
     Order allow,deny 
     Allow from all 
    </Files> 
    </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> 

Änderungen vorgenommen werden:

  1. Verwenden mod_wsgi Daemon-Modus nicht eingebetteten Modus. Siehe http://blog.dscpl.com.au/2012/10/why-are-you-using-embedded-mode-of.html
  2. Korrigieren Sie die Apache-Verzeichniszugriffsberechtigung. Dass es so funktioniert hat, wie du es hattest, lässt darauf schließen, dass du an anderer Stelle in der Apache-Konfiguration laxe Sicherheitseinstellungen hast, denn das, was du getan hast, hätte nicht funktionieren sollen. Haben Sie es in den bevorzugten Mechanismus geändert, aber Sie sollten herausfinden, warum Ihre Apache-Konfiguration es Apache erlaubt, jede Datei im Dateisystem zu liefern.
  3. Legen Sie den korrekten Python-Modul-Suchpfad fest. In der Daemon-Prozessgruppe seit dem Wechsel zu diesem Prozess erledigt.
  4. Für die Verwendung von Python Main (Application) Interpreter Kontext in Daemon-Prozessgruppe, um Probleme mit Erweiterungsmodulen von Drittanbietern für Python zu vermeiden, die nicht in Sub-Interpreter funktionieren.
+0

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

+0

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

Verwandte Themen