2013-07-16 16 views
10

Ok, so versuche ich, Python mit Bottle.py, durch Apache und mod_wsgi zu laufen, und es nicht so weit arbeiten ...mit Apache + Flasche + Python

Ich laufe es auf windows mit einem xampp. Python v2.7

der Code i httpd hinzugefügt (Apache config):

<VirtualHost *> 
    ServerName example.com 
    WSGIScriptAlias/C:\xampp\htdocs\GetXPathsProject\app.wsgi 
    <Directory C:\xampp\htdocs\GetXPathsProject> 
      Order deny,allow 
      Allow from all 
    </Directory> 
</VirtualHost> 

mein app.wsgi Code:

import os 
os.chdir(os.path.dirname(__file__)) 
import bottle 
application = bottle.default_app() 

und meine hello.py:

from bottle import route 
@route('/hello') 
def hello(): 
    return "Hello World!" 

Wenn ich versuche, zu localhost/Hallo zu gehen, bekomme ich einen 404 Fehler und ich habe keinen anderen Fehler in der Apache Log-Datei Vermutlich etwas Grundlegendes vermissen, wird froh um Hilfe sein.

+0

mit der gleichen Ausgabe Fest = \ – jbkkd

Antwort

6

Es gibt keinen Verbindungspunkt von Ihrer Datei wsgi zu Ihrer Datei hello.py.
Setzen Sie den Inhalt in Ihre hello.py in die app.wsgi und starten Sie Ihren Webserver neu.
Das sollte das Problem lösen.

Um Ihre Anwendung modular so, dass Sie den Code in verschiedenen Dateien setzen, überprüfen Bottle Äquivalent Riss (verwendet von Flask Rahmen)

+0

tnx! es funktioniert :) –

+0

Sie sind willkommen :) –

2

Ich sehe Ihre hello.py nirgends referenziert.

Sie sollten nur den Inhalt von hello.py (die route) in app.wsgi.

+0

hey, ihr Klang logisch, aber können Sie den Code zeigen, dass ich hinzufügen müssen? –

+0

Sicher, ich bin jetzt so auf meinem Handy unterwegs; Wenn ich an einen Computer zurückkomme, werde ich den Code eingeben. Aber im Grunde sind es nur Ihre beiden Dateien. Wenn Sie nicht warten wollen, bis ich wieder zu einem Laptop komme, versuchen Sie es einfach. :) –

+0

Nun, ich versuchte und konnte es nicht mit Apache arbeiten, aber jetzt habe ich es ohne Apache laufen, nur mit dem Befehl run(), wenn Apache ausgeschaltet ist, und immer noch, ich werde glücklicher sein, wenn ich sein werde in der Lage, es mit Apache arbeiten zu lassen –

1

ich bin mein Fazit für die Menschen hinzugefügt, die das gleiche Problem haben wie Ich tat: wie Kniel-Before-ZOD und Ron.rothman, musste ich meinen Code in der WSGI-Datei schreiben, da Python den Code von dort ausgeführt wird, aber wenn Sie Ihre eigenen Py-Dateien erhalten möchten, müssen Sie sie importieren die WSGI-Dateien wie folgt aus:

from hello import application 

das „Hallo“ ist die python-Dateiname und die „Anwendung“ ist, wie Sie in yo schreiben sollte u Py und NICHT in wsgi Datei:

application = bottle.default_app() 

auch Apache jedes Mal neu zu starten, hatte ich eine Änderung vorgenommen hat (und ich weiß nicht, dass - das warum sein machte mich verrückt). Tnx für die Leute, die mir geholfen haben. GooLuck.

+1

Nur ein Tipp: Wenn Sie 'bottle.run (reloader = True)' verwenden, dann müssen Sie Apache nicht jedes Mal neu starten, wenn Sie eine Änderung vornehmen. –

+0

können Sie leider nicht mit Apache laufen :( –

+0

Mein schlecht, du hast Recht. Ach. –

2

Oder Duans Kommentare waren ein guter Ausgangspunkt für mich, um die app.wsgi und die Anwendung Python-Datei zu trennen. Aber sie waren ein wenig kryptisch für mich zu verstehen. Nach ein paar Stunden Herumspielen, hier ist was für mich funktionierte:
[BTW, ich arbeite an OSX. Bitte passen Sie die Pfade, Benutzer, Gruppen entsprechend Ihrem Betriebssystem an]

/Bibliothek/WebServer/Dokumente/hallo_app/app.wsgi:

import sys 

sys.path.insert(0, "/Library/WebServer/Documents/hello_app") 

import bottle 
import hello 
application = bottle.default_app() 

/Library/WebServer/Documents/hello_app/hello.py:

from bottle import route 

@route('/hello') 
def hello(): 
    return "Hello World!" 

/etc/apache2/extra/httpd-vhosts.conf:

<VirtualHost *:80> 
    ServerName xyz.com 

    WSGIDaemonProcess hello_app user=_www group=_www processes=1 threads=5 
    WSGIScriptAlias /v1 /Library/WebServer/Documents/hello_app/app.wsgi 

    <Directory /Library/WebServer/Documents/hello_app> 
     WSGIProcessGroup hello_app 
     WSGIApplicationGroup %{GLOBAL} 
     Order deny,allow 
     Allow from all 
    </Directory> 
</VirtualHost> 

Vergessen Sie nicht, Ihren Apache-Server neu zu starten.

Check the app in the web browser