Simpler Import lässt 500 Internal Error auf L.A.M.P stack passieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
syrrokzu
User
Beiträge: 5
Registriert: Samstag 14. September 2019, 19:27

Hallo Leute (:

Vorweg, zu meinen Setup:
Meine Development-Environment basiert auf einer VirtualBox die Ubuntu18.04 laufen hat. MYSQL, Apache und, auch wenn unnötig für meine Zwecke, PHP sind installiert, also quasi ein Standart-LAMP Stack.
Da ich mich mit dem ganzen Hintergrundsachen nicht sehr gut auskenne bitte ich schonmal um entschuldigung.

Ich habe dort eine Flask App mittels Mod_wsgi auf meinen Apache2 Server deployed.

Mitten im Projekt dachte ich mir es wäre vllt doch Klug so manch sachen in externe Dateien auszulagern.
Meine FlaskApp läuft problemlos, alles wie ich es möchte. Sobald ich aber

Code: Alles auswählen

from cms import ContentDicts
zu meiner __init__.py hinzufüge gibt es mir IMMER ein Interal500 Error. Fehler meinerseits ist auch mit auf minimum reduzierten Code reproduzierbar:

OrdnerStruktur

Code: Alles auswählen

\var\www\
\FlaskApp\
        FlaskApp.wsgi
        \FlaskApp\
                __init__.py
                cms.py
                \static\
                        favicon.ico
                \templates\
                        header.html
                        dashboard.html
/var/www/FlaskApp/FlaskApp/__init__.py

Code: Alles auswählen

from flask import Flask, render_template
from cms import ContentDicts

app = Flask(__name__)

@app.route('/')
def homepage():
    return "How ya doin"


if __name__ == "__main__":
    app.run()
/var/www/FlaskApp/FlaskApp/cms.py

Code: Alles auswählen

def Content():
   ContentDicts = {"General":'Test'}
/var/www/FlaskApp/FlaskApp.wsgi

Code: Alles auswählen

#!/usr/bin/python3.6
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/FlaskApp/")

from FlaskApp import app as application
application.secret_key = "develop"
/etc/apache2/sites-available/FlaskApp.conf

Code: Alles auswählen

<VirtualHost *:80>
                ServerName 192.168.0.1
                ServerAdmin youremail@email.com
                WSGIScriptAlias / /var/www/FlaskApp/FlaskApp.wsgi
                <Directory /var/www/FlaskApp/FlaskApp/>
                        Order allow,deny
                        Allow from all
                </Directory>
                ErrorLog ${APACHE_LOG_DIR}/FlaskApp-error.log
                LogLevel warn
                CustomLog ${APACHE_LOG_DIR}/FlaskApp-access.log combined
</VirtualHost>
-FlaskApp-ErrorLog:
[Fri Jul 24 03:25:46.950696 2020] [wsgi:error] [pid 6767] [client 192.168.0.15:58567] mod_wsgi (pid=6767): Failed to exec Python script file '/var/www/FlaskApp/FlaskApp.wsgi'.
[Fri Jul 24 03:25:46.950910 2020] [wsgi:error] [pid 6767] [client 192.168.0.15:58567] mod_wsgi (pid=6767): Exception occurred processing WSGI script '/var/www/FlaskApp/FlaskApp.wsgi'.
[Fri Jul 24 03:25:46.951260 2020] [wsgi:error] [pid 6767] [client 192.168.0.15:58567] Traceback (most recent call last):
[Fri Jul 24 03:25:46.951324 2020] [wsgi:error] [pid 6767] [client 192.168.0.15:58567] File "/var/www/FlaskApp/FlaskApp.wsgi", line 7, in <module>
[Fri Jul 24 03:25:46.951340 2020] [wsgi:error] [pid 6767] [client 192.168.0.15:58567] from FlaskApp import app as application
[Fri Jul 24 03:25:46.951352 2020] [wsgi:error] [pid 6767] [client 192.168.0.15:58567] File "/var/www/FlaskApp/FlaskApp/__init__.py", line 2, in <module>
[Fri Jul 24 03:25:46.951355 2020] [wsgi:error] [pid 6767] [client 192.168.0.15:58567] from cms import ContentDict
[Fri Jul 24 03:25:46.951374 2020] [wsgi:error] [pid 6767] [client 192.168.0.15:58567] ModuleNotFoundError: No module named 'cms'

Könnte mir nicht erklären wieso..Andere Pfade findet er ja auch.. Modul render_template findet seinen nötigen templates ordner ja auch und dort beinhaltete Dateien. Ist meine wsgi falsch konfiguiert? Wie gesagt, absolut unwissend über die Hintergrundsachen.. /:

Abgesehen davon,
Das FavIcon adde ich z.B. so in meiner HTML file in Templates:
{{ url_for('static', filename='favicon.ico') }

Pfadtechnisch fühle ich wäre nichts falsch. Irgendeine möglichkeit mir den Pfad ausgeben zu lassen in dem es mit imports anfangen würde oder in welchen Pfad es sucht? Oder liegt das Problem eh wo anders?:(
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum so kompliziert, wenn du selbst sagst, dass das alles unnötig ist?
cms ist im Paket FlaskApp, Du brauchst also entweder den absoluten Import FlaskApp.cms oder den relativen .cms
Als nächstes lässt sich dann ContentDicts nicht importieren, weil es nicht existiert.
syrrokzu
User
Beiträge: 5
Registriert: Samstag 14. September 2019, 19:27

Oh.. Das es so simple ist über

Code: Alles auswählen

from FlaskApp.cms import ContentDict
Fühl mich blöd x)

Klar existiert ContentDicts im Beispiel (noch) nicht bzw hab whs beim minimieren des Codes das übersehen, jetzt funktioniert alles wie gewollt vielen dank (:
Antworten