Problem mit BaseWSGIServer und Colubrid

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Problem mit BaseWSGIServer und Colubrid

Beitragvon EnTeQuAk » Donnerstag 30. November 2006, 16:42

Hallo alle zusammen!

Ich bin grad am rumspielen mit dem BaseWSGIServer von http://wsgiarea.pocoo.org.

So! Mein Problem ist folgendes. Sobald ich den Server über Colubrid wiefolgt starte geht alles noch glatt:

Code: Alles auswählen

execute(execute(app=daucms, debug=True, hostname=host, port=port)


Klappt alles einwandfrei :) Allerdings würde ich gerne die '' reload '' Funktion von Colubrid mit benutzen. Jedoch sobald ich '' reload=True '' setze gibet nen Fehler:

Code: Alles auswählen

execute(app=daucms, debug=True, hostname=host, port=port,
            reload=True)

Code: Alles auswählen

Traceback (most recent call last):
  File "daucms.py", line 29, in ?
    start_server()
  File "daucms.py", line 19, in start_server
    reload=True)
  File "/home/ente/Desktop/daucms/colubrid/server.py", line 62, in execute
    run = WSGIServer(app, hostname, port).serve_forever
  File "/home/ente/Desktop/daucms/BaseWSGIServer.py", line 95, in __init__
    HTTPServer.__init__(self, (hostname, port), WSGIRequestHandler)
  File "/usr/lib/python2.4/SocketServer.py", line 330, in __init__
    self.server_bind()
  File "/usr/lib/python2.4/BaseHTTPServer.py", line 101, in server_bind
    SocketServer.TCPServer.server_bind(self)
  File "/usr/lib/python2.4/SocketServer.py", line 341, in server_bind
    self.socket.bind(self.server_address)
  File "<string>", line 1, in bind
socket.error: (98, 'Address already in use')


Und ich versichere euch! :) Es ist kein weiterer Server auf Port 8080 gestartet worden.

Woran könnte das liegen? Bug in Colubrid oder einfach falsche Benutzung? :)

Weil. Sobald ich den Reloader mit Paste benutze geht es. Ob es mit wsgiref geht weiß ich noch nicht. Aber beim BaseWSGIServer streikt er :'(


MfG EnTeQuAk

EDIT:

ich sehe gerade:

Dank dem Reloader startet der Server öfters... daher die falsche Adresse. Bedeutet, da ist irgentwo eine Endlosschleife drinne.
Wo... keine Ahnung... vllt. kann sich ja ma der Autor äußern :)
Zuletzt geändert von EnTeQuAk am Donnerstag 30. November 2006, 16:49, insgesamt 1-mal geändert.
BlackJack

Beitragvon BlackJack » Donnerstag 30. November 2006, 16:48

Sockets werden vom Betriebssystem nicht sofort wieder freigegeben. Ausser man fordert das von einem Socket explizit an. Mit `setsockopt()` die Option `SO_REUSEADDR` setzen, sollte es glaube ich tun.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 30. November 2006, 16:50

Das Problem kenne ich bzw. hatte ich auch mal :)
Du hast IMHO die App nicht richtig aufgebaut.

Ich bin dem aus dem Weg gegangen:

Code: Alles auswählen

if __name__ == '__main__':
    # Eine Aufwendigere Variante, damit der Standalone-Entwicklungsserver
    # auch funktioniert, s. http://trac.pocoo.org/ticket/87
    def start():
        host = "localhost"
        port = 8080
        print "\n", "="*79
        print "Starting developer server on: '%s:%s'...\n" % (host, port)

        # with 'debugged application':
        from colubrid.debug import DebuggedApplication
        global app
        app = DebuggedApplication(app)

        # usind the new wsgiref (from Python 2.5)
        from wsgiref.simple_server import WSGIServer, WSGIRequestHandler
        server = WSGIServer((host, port), WSGIRequestHandler)
        server.set_app(app)
        server.serve_forever()

    from colubrid import reloader
    reloader.main(start, [])


siehe: http://pylucid.net/trac/browser/trunk/P ... =name#L406

EDIT: Schau auch mal hier: http://trac.pocoo.org/ticket/87

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Donnerstag 30. November 2006, 17:06

Ach das hast du mit "zwei server starten gleichzeitig" gemeint :D


Jedoch bekomme ich nun eine andere Fehlermeldung. Der Server startet nicht wirklich:

Code: Alles auswählen

Unhandled exception in thread started by <function start_server at 0xb7b1ec34>
Traceback (most recent call last):
  File "daucms.py", line 35, in start_server
    reloader.main(start_server, [])
  File "/home/ente/Desktop/daucms/colubrid/reloader.py", line 83, in main
    thread.start_new_thread(main_func, ())
thread.error: can't start new thread


Meine Startdatei sieht folgendermaßen aus:
http://paste.pocoo.org/show/238/

Woran liegt das? Direkt hat er ja ein Problem mit meiner Funktion '' start_server '' wenn ich das richtig mitbekomme.

MfG EnTeQuAk
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 30. November 2006, 17:13


CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Donnerstag 30. November 2006, 17:19

Du bist mein Held! :D

Danke! :)


MfG EnTEQuAk

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder