MacDuff Posted November 16, 2015 at 02:55 PM Share Posted November 16, 2015 at 02:55 PM ein paar seltsamkeiten mit einer kleinen und einer großen python-flask anwendung fürs red-brick web-interface: * die kleine besteht aus einer index.py und den dazu gehörenden templates/static-ordnern. wenn ich die auf den red hochlade, bekomme ich bei klick auf "bin": "The requested URL /programs/wc5/bin/index.py was not found on this server." sorry, aber index.py liegt genau in dem pfad. * die große applikation generiert sofort nach aufruf einen 500er server error ohne genaue spezifikation. beide laufen auf meinem linux- und windowsrechner ohne probleme. die kleine funktionierte zuvor auch auf dem brick - solange in index.py kein lokaler modul-import (zB eine klasse mit tinkerforge-messwert-abfragen) stattfand. schon der import einer leeren klasse (!) produzierte den 500er error, wie ich nach langem trial & error herausfand. kommt mir alles ziemlich seltsam vor... macduff Quote Link to comment Share on other sites More sharing options...
photron Posted November 17, 2015 at 10:27 AM Share Posted November 17, 2015 at 10:27 AM Funktioniert dieses Minimalbeispiel, wenn du es als index.py hochlädst: from flask import Flask application = Flask(__name__) app = application @app.route('/') def index(): return '<html><body>Hello World!</body></html>' Quote Link to comment Share on other sites More sharing options...
MacDuff Posted November 17, 2015 at 12:26 PM Author Share Posted November 17, 2015 at 12:26 PM Das Miniprogramm funktioniert. Inzwischen habe ich auch gelernt, dass es explizit application = Flask(__name__) heißen muss (also "application"), damit der WSGI server das richtig verdaut. Ansonsten behauptet er -- etwas irreführend --: The requested URL /programs/miniflask/bin/index.py was not found on this server. Es funktioniert auch noch viel mehr: Bootstrap, WTFform, SQLAlchemy... Was aber nicht geht, ist sowas: from flask import Flask from classfile import Klasse application = Flask(__name__) app = application @app.route('/') def hello_world(): return '<html><body>Hello World!</body></html>' classfile.py liegt im selben Verzeichnis neben index.py und sieht so aus: class Klasse: def __init__(self): pass Mit dieser Importanweisung gibt es einen Server Error 500 - auf dem Red. Beim Testen mit Flask/Werkzeugs eingebauten Developmentserver (in PyCharm): kein Problem. Verlege ich die Klasse nach index.py und mache myclass= Klasse() funktioniert es auch. Ich will nur keine 500+ Zeilen langen index.px-Dateien schreiben... verstehe aber nicht, warum der Import von allen möglichen flask.ext. usw keine Probleme bereitet. Quote Link to comment Share on other sites More sharing options...
photron Posted November 17, 2015 at 01:01 PM Share Posted November 17, 2015 at 01:01 PM Das der import nicht klappt könnte daran liegen, dass das aktuelle Verzeichnis nicht das ist in dem deine index.py liegt. Füge mal bitte folgendes vor dem problematischen import ein: import sys import os sys.path.insert(0, os.path.dirname(os.path.realpath(__file__))) Das fügt, dass Verzeichnis in dem deine index.py liegt in den sys.path ein in dem Python nach Modulen sucht. Wenn das nicht hilft, dann kannst du Debug aktivieren, was die Python Exception anzeigen sollte die den 500er Fehler erzeugt: application = Flask(__name__) application.debug = True Quote Link to comment Share on other sites More sharing options...
MacDuff Posted November 17, 2015 at 01:59 PM Author Share Posted November 17, 2015 at 01:59 PM Bingo! Das hilft in der Tat, vielen Dank. Vielleicht ist das einen Hinweis auf der RedBrick/Web-Interface Dokseite wert? Auf die Spur gebracht, habe ich jetzt auch noch in der Flask-Doku nachgesehen, wo es heißt: Store that file somewhere that you will find it again (e.g.: /var/www/yourapplication) and make sure that yourapplication and all the libraries that are in use are on the python load path. If you don’t want to install it system wide consider using a virtual python instance. Keep in mind that you will have to actually install your application into the virtualenv as well. Alternatively there is the option to just patch the path in the .wsgi file before the import: import sys sys.path.insert(0, '/path/to/the/application') http://flask.pocoo.org/docs/0.10/deploying/mod_wsgi/ md Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.