Запуск Apache + Bottle + Python

Хорошо, поэтому я пытаюсь запустить Python с Bottle.py, через Apache и mod_wsgi, и он пока не работает...

Я запускаю его на windows, используя xampp. python v2.7

код i, добавленный в 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>

мой код app.wsgi:

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

и мой hello.py:

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

когда я пытаюсь перейти на localhost/hello, я получаю ошибку 404 и у меня нет другой ошибки в файле журнала Apache, возможно, отсутствует что-то основное, будет рад за помощь.

Ответ 1

В файле wsgi нет ссылки на файл hello.py.

Поместите содержимое в hello.py в app.wsgi и перезапустите веб-сервер.

Это должно решить проблему.

Чтобы сделать ваше приложение модульным, чтобы вы могли поместить код в различные файлы, проверьте эквивалент бутылки чертежей (используется флеш-каркасом)

Ответ 2

Я не вижу вашего hello.py ссылки где-нибудь.

Вы должны просто поместить содержимое hello.py(route) в app.wsgi.

Ответ 3

Or Duan комментарии были хорошей отправной точкой для меня, чтобы отделить app.wsgi и файл python приложения. Но для меня это было немного загадочно. После нескольких часов работы, вот что сработало для меня:
[BTW, я работаю над OSX. Пожалуйста, настройте пути, пользователь, группу в соответствии с вашей операционной системой]

/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>

Не забудьте перезапустить сервер Apache.

Check the app in the web browser

Ответ 4

Я добавляю свой вывод для людей, у которых будет такая же проблема, как и у меня: как Kneel-Before-ZOD и ron.rothman, мне пришлось написать свой код в файле WSGI, так как python запускает код оттуда, НО если вы хотите получить свои собственные файлы py, вам нужно ИМПОРТЬ их из файлов WSGI, например что:

from hello import application

"hello" - это имя файла Python FILE NAME, а "приложение" - это то же, что вы должны написать в файле py и NOT в wsgi:

application = bottle.default_app()

также приходилось перезапускать apache каждый раз, когда я делал изменения (и я не знал, что - почему это сбило меня с ума). tnx для парней, которые помогли мне. GooLuck.