Jump to content

[Python/Flask][redbrick] Läuft nicht ...


MacDuff

Recommended Posts

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

 

 

Link to comment
Share on other sites

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.

 

 

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...