2013-07-16 19 views
10

Ok, więc staram się uruchomić Pythona z Bottle.py, thru Apache i mod_wsgi, i to nie działa tak daleko ...działa Apache + Butelka + Python

Używam go na oknach , używając xampp. pyton v2.7

kod dodałem do httpd (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> 

mój kod app.wsgi:

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

i mój hello.py:

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

kiedy próbuję przejść do localhost/hello otrzymuję błąd 404 i nie mam żadnego innego błędu w pliku dziennika Apache , prawdopodobnie brakuje czegoś podstawowego, będzie zadowolony z pomocy.

+0

Stuck z tej samej kwestii = \ – jbkkd

Odpowiedz

6

Nie ma punktu połączenia z pliku wsgi do pliku hello.py.
Umieść treść w swoim hello.py w aplikacji app.wsgi i uruchom ponownie swój serwer sieciowy.
To powinno rozwiązać problem.

Aby dokonać modułowych aplikacji takich, które można umieścić kod do różnych plików, sprawdź równowartość butelki uprzednia (używane przez Kolby ramowa)

+0

tnx! jego działanie :) –

+0

Serdecznie zapraszamy :) –

2

Nie widzę pliku hello.py, do którego odwołuje się w dowolnym miejscu.

Powinieneś umieścić zawartość hello.py (route) w app.wsgi.

+0

hej, jego dźwięk logiczne, ale można pokazać kod, który trzeba dodać? –

+0

Oczywiście, teraz podróżuję po komórce; opublikuje kod, gdy wrócę do komputera. Ale w zasadzie to tylko oba pliki połączone w jeden. Jeśli nie chcesz czekać na mnie, aby wrócić do laptopa, po prostu spróbuj. :) –

+0

Cóż, próbowałem i nie mogłem pracować z Apache, ale teraz udało mi się uruchomić go bez apache, po prostu użyłem polecenia run(), gdy apache jest wyłączony, i nadal, będę szczęśliwszy, jeśli będę może sprawić, że będzie działać z apache –

1

Dodaję mój wniosek dla ludzi, którzy mają ten sam problem co Zrobiłem: jak Kneel-Before-ZOD i ron.rothman, musiałem napisać mój kod w pliku WSGI, ponieważ Python uruchamia kod stamtąd, ALE jeśli chcesz dostać własne pliki py, musisz je IMPORTOWAĆ z pliki WSGI tak:

from hello import application 

z „hello” to nazwa pyton FILE i „aplikacja” jest jak ty powinno się pisać w yo U Py pliku a nie w WSGI:

application = bottle.default_app() 

również musiał ponownie uruchomić apache za każdym razem zrobiłem zmianę (a ja nie wiedziałem, że - to dlaczego jej się mnie do szału). tnx dla facetów, którzy mi pomogli. GooLuck.

+1

Wskazówka: jeśli użyjesz 'bottle.run (reloader = True)', nie będziesz musiał ponownie uruchamiać Apache'a za każdym razem, gdy dokonasz zmiany. –

+0

Niestety nie możesz użyć run z apache :( –

+0

Mój zły, masz rację. Niestety. –

2

Lub komentarze Duana były dobrym punktem wyjścia dla mnie do oddzielenia app.wsgi i pliku python aplikacji. Ale były dla mnie trochę zagadkowe. Po kilku godzinach pracy, zadziałało dla mnie:
[BTW, pracuję nad OSX. Dostosuj ścieżki, użytkownika, grupę zgodnie z posiadanym systemem operacyjnym]

/Library/WebServer/Documents/hello_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> 

Nie zapomnij ponownie uruchomić serwera apache.

Check the app in the web browser