Bottle: Apache mod_wsgi

Django, Flask, Bottle, WSGI, CGI…
Antworten
peddy
User
Beiträge: 121
Registriert: Montag 30. Juni 2008, 13:51

Hallo,

ich habe mir meine erste einfache Bottle App zusammengebaut und würde sie gerne auf einem Apache2 Server betreiben.

1. mod_wsgi installiert und aktiviert.
2. /etc/apache2/conf.d/wbt.conf angelegt
<VirtualHost *>
ServerName wbt.test.de

WSGIDaemonProcess wbt user=www-data group=www-data processes=1 threads=5
WSGIScriptAlias / /var/www/wbt/app.wsgi

<Directory /var/www/wbt>
WSGIProcessGroup wbt
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
3. /var/www/wbt angelegt und alle Dateien der App rein kopiert
4. app.py in app.wsgi umbenannt und editiert

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import os
os.chdir(os.path.dirname(__file__))

from bottle import Bottle, run, template, static_file, request, get, post, redirect
import bottle.ext.sqlite

app = Bottle()
plugin = bottle.ext.sqlite.Plugin(dbfile='./wbt.db')
app.install(plugin)

@app.route('/')
def show_index():
	return template('index')

# Hier kommt noch jede Menge Code der gekürzt wurde.

# run(app, host='0.0.0.0', reloader = True, debug = True)
Aktuell bekomme ich noch die Fehlermeldung Internal Server Error und im error.log steht:
[Mon Sep 08 15:19:14 2014] [error] [client 172.20.210.75] Traceback (most recent call last):
[Mon Sep 08 15:19:14 2014] [error] [client 172.20.210.75] File "/var/www/wbt/app.wsgi", line 12, in <module>
[Mon Sep 08 15:19:14 2014] [error] [client 172.20.210.75] from bottle import Bottle, run, template, static_file, request, get, post, redirect
[Mon Sep 08 15:19:14 2014] [error] [client 172.20.210.75] ImportError: No module named bottle
Ich schätze das Problem liegt in der Datei app.wsgi. Wie muss ich das Programm anpassen, damit es läuft? Ist sicher ganz einfach, wenn man weiß wie es geht ;-) Im Prinzip habe ich nur die Zeilen 4 und 5 hinzugefügt und die letzte Zeile auskommentiert. Der Rest vom Programm ist unverändert und lief beim entwickeln fehlerfrei.
BlackJack

@peddy: Hast Du Bottle denn installiert?
peddy
User
Beiträge: 121
Registriert: Montag 30. Juni 2008, 13:51

@ BlackJack

Nein, ich habe es nicht über PyPi oder ähnliches installiert. Ich habe einfach bottle.py runter geladen und im gleichen Verzeichnis wie die Anwendung (also /var/www/wbt) abgelegt.
BlackJack

@peddy: Dann ist dieser Pfad offenbar nicht im Suchpfad für Module. Kann man aber hinzufügen:

Code: Alles auswählen

path = os.path.dirname(__file__)
sys.path.append(path)
peddy
User
Beiträge: 121
Registriert: Montag 30. Juni 2008, 13:51

Ok, ein Fehler weniger. Aktuell bekomme ich noch diese Meldung:
[Wed Sep 10 08:02:45 2014] [notice] Apache/2.2.22 (Debian) mod_fcgid/2.3.6 PHP/5.4.4-14+deb7u14 proxy_html/3.0.1 mod_wsgi/3.3 Python/2.7.3 configured -- resuming normal operations
[Wed Sep 10 08:02:50 2014] [error] [client 172.20.210.75] mod_wsgi (pid=14966): Target WSGI script '/var/www/wbt/app.wsgi' does not contain WSGI application 'application'.
peddy
User
Beiträge: 121
Registriert: Montag 30. Juni 2008, 13:51

Ich habe noch ein Tutorial gefunden, in dem die Einrichtung erklärt wird. Ich habe die Dateien entsprechend geändert.
http://bottlepy.org/docs/dev/tutorial_a ... rver-setup

/etc/apache2/conf.d/wbt.conf
<VirtualHost *>
ServerName wbt.test.de

WSGIDaemonProcess wbt user=www-data group=www-data processes=1 threads=5
WSGIScriptAlias / /var/www/wbt/adapter.wsgi

<Directory /var/www/wbt>
WSGIProcessGroup wbt
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
/var/www/wbt/adapter.wsgi
import sys, os

path = os.path.dirname(__file__)
sys.path.append(path)

import bottle

sys.path = ['/var/www/wbt/'] + sys.path
os.chdir(os.path.dirname(__file__))

import wbt

application = bottle.default_app()
:/var/www/wbt#wbt.py

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

from bottle import Bottle, run, template, static_file, request, get, post, redirect
import bottle.ext.sqlite
 
app = Bottle()
plugin = bottle.ext.sqlite.Plugin(dbfile='./wbt.db')
app.install(plugin)

@app.route('/')
def show_index():
        return template('index')
Im Apache Error-Log tauchen jetzt keine Fehler mehr auf, aber im Browser erhalte ich diese Meldung:
Error: 404 Not Found

Sorry, the requested URL 'http://wbt.test.de/' caused an error:

Not found: '/'
Hat noch jemand einen Tipp für mich?
BlackJack

@peddy: Entweder in `wbt` keine eigene Application mit ``Bottle()`` erstellen oder aber in der `*.wsgi` das statt der Default-App, die ja nirgends mit Inhalt, also Routen ”gefüllt” wird, die Application verwenden die im `wbt` erstellt und mit Routen versehen ist.
Antworten