Bottlepy homepage online stellen

Django, Flask, Bottle, WSGI, CGI…
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

So nun ist meine erste kleine Bottlepy Homepage fertig und ich würde diese gerne hochladen :mrgreen: Ihr wisst was jetzt kommt.. Wie stell ich das an?

ich hab meine main.py in der ich alle meine Routen kleine Funktionen etc definiert habe. ganz unten steht dann noch die Zeile

"run(host="localhost", port=8080, reloader=True)"

das wird ja bestimmt schonmal nicht richtig sein nehme ich mal an...weiter denke ich nicht (ich weiß es durch ausprobieren ^^ ) , dass es nicht ausreicht die index.py index zu nennen und das "haupttemplate" index.tpl zu nennen...genau der server findet es nicht. Ich hab aber bis jetzt nichts gefunden und mir brennen die finger das endlich hoch zu laden!!!! :) kann mir da jmd einen Tipp geben :mrgreen:

danke
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

Ist es wirklich so schwer, dass mir keiner helfen kann? :( ich bin ein anfänger was das angeht und würde mich über ein paar links oder ein kleines tut freuen
BlackJack

@DanJJo: Ein Link: http://bottlepy.org/docs/stable/deployment.html

Die Frage ist unter anderem tatsächlich „schwer” weil die Antwort davon abhängt was auf dem Server verfügbar ist und wie der konfiguriert ist.
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

Sehr informativer Link. Danke. Leider verstehe ich das noch nicht so ganz. Ich hab jetzt Webspace (kA von welchem Anbieter...hatte noch Zugangsdaten...) und eine Domain. Wie kann ich herausfinden welche "anbindung" ich mit meinem Webspace habe? Verstehe ich das richtig, dass es an meinem Webspace anbieter liegt, welche variante ich verwenden kann?! Sprich ich hätte gerne Paste (da supertoll) und muss schauen, ob das unterstützt wird? Und wo liegt jetzt der Unterschied zwischen bsp: paste und einer Apache mod_wsgi lösung? hmpf ich wollte den spaß doch nur vernünftig online stellen mit einem vernünftig schnellen zugriff :(
BlackJack

@DanJJo: Es liegt am Webspace-Anbieter. Wenn ich das richtig verstehe, dann möchtest Du einen eigenen Server laufen lassen. Da hört es bei vielen Webspace-Anbietern schon auf, weil viele keine lang laufenden Benutzerprozesse erlauben. Das nächste Problem dürfte dann der Port sein, denn am Standard-Webserverport 80 wird schon der vom Anbieter bereitgestellte Webserver laufen. Das ist meistens ein Apache. Falls der Anbieter eigene Serverprozesse erlaubt, ist die nächste Frage an welche Ports Du die binden darfst. Und dann sollte der Anbieter .htaccess-Regeln erlauben um Deine normale URL auf diesen Port umleiten zu können. Am schönsten wäre es natürlich wenn das für den Webseitenbesucher transparent passiert, damit der keine Portnummer in der URL sieht.

Vorteil von Apache und mod_wsgi ist, dass das der Webspace-Anbieter einmal für alle Kunden auf dem gleichen Server bereit stellt. Nachteil ist, dass man nur ein mod_wsgi für eine feste Python-Version haben kann, also alle Kunden auf die gleiche Python-Version festgelegt sind und wenn die geändert wird, sich das auch für *alle* auf einen Schlag ändert. Das ist zum Beispiel ein Grund für Anbieter lieber FastCGI anzubieten. Das kann nicht nur mit Python, sondern auch mit anderen Programmiersprachen verwendet werden, und wenn es mehrere Python-Versionen auf dem Server gibt, kann sich auch jeder aussuchen welche er denn am liebsten verwenden möchte.
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

Ok Danke. Also ich will keinen eigenen Server laufen lassen :mrgreen: nehme gerne was da ist also apache und fastcgi. Sehe ich das richtig, dass ich also irgendwie diese Magic fast CGI datei haben/programmieren muss an der ich meine main.py "andocken" kann damit die seite im Internet läuft?! also ich hätte eine domain / webspace bei "http://all-inkl.com/" (keine werbung)
BlackJack

@DanJJo: Bieten die denn überhaupt Python an? Ich sehe da nur PHP und Perl auf den Webseiten erwähnt.
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

wie immer hast du recht...ich werd mir also auf ueberspace etwas besorgen...aber da sehe ich es also richtig. Ich nehm meine "magic Fast CGI datei" welche meine main.py aufruft un der alle routen etc drin stehen und es läuft?! dann brauch ich nur noch wissen über Fast cgi und die anbindung zu bottle...schlecht sich su dumm zu fühlen. :mrgreen:
BlackJack

@DanJJo: Das erste Beispiel aus der Bottle-Dokumentation leicht angepasst:

Code: Alles auswählen

#!/usr/bin/env python
from bottle import route, run, template

@route('/hello/')
@route('/hello/<name>')
def index(name='World'):
    return template('<b>Hello, <i>{{name}}</i></b>!', name=name)

run(server='flup', bindAddress=None)
Einfach in den ``fcgi-bin/``-Ordner packen.
lunar

@DanJJo Probiere doch Heroku. Dort musst Du Dich gar nicht ums Deployment kümmern, Heroku macht das meiste automatisch. Die kostenlosen Varianten reichen für einfache Anwendungen.
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

@ BlackJack

Ich hab erstmal genau die Datei hoch geladen und bekomme ein

"Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, hallo@uberspace.de and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log."

aber im grunde genommen ist das doch einfach meine Main.py nur das bei mir momentan noch run

Code: Alles auswählen

run(host="localhost", port=8080, reloader=True)
steht anstelle der "flup" geschichte aber wie gesagt es klappt so nicht :\ mensch ist das nervig
BlackJack

@DanJJo: Du startest damit ja auch einen eigenen Webserver der dann von Apache versucht wird als FastCGI-Prozess zu starten, nur dass der sich überhaupt nicht wie so einer verhält, und damit einen Fehler verursacht weil Apache nicht vernünftig mit ihm kommunizieren kann.
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

hmpf...wie bekomme ich ihn denn in Kommunikation mit dem Apache....ich brauch ja keinen eigenen Webserver starten oder doch?! ich will doch nur meine main.py ausführen lassen...oder startet man so einen eigenen Server ? ah mann ich bin total durcheinander ... du schreibst pack das rein dann funktioniert das schon und jetzt sagst du ist klar das es nicht funktioniert....hmpf was denn jetzt :K
BlackJack

@DanJJo: Genau bei *der* Zeile die angibt wie die Bottle-Anwendung die Anfragen bearbeitet, startest Du einen eigenen Webserver statt sie über `flup` als FastCGI-Prozess zu starten. Es sollte klar sein, dass *das* nicht funktioniert. Dir ist ja anscheinend selber klar dass Du keinen eigenen Webserver starten musst/darfst — tust das aber.
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

Ja aber genau das tu ich doch und es funktioniert nicht!! ich starte meine Anwendung über

Code: Alles auswählen

run(server='flup', bindAddress=None)
... wir haben anscheinend aneinander vorbei gesprochen. Ich versuch meine main.py und die oben von dir genannte "bsp.py" zu starten und bekomme den Fehler...
BlackJack

@DanJJo: Was passiert denn wenn Du das auf der Kommandozeile einfach mal als Skript startest? Da sollte dann der HTML-Text einer 404-Fehlerseite ausgegeben werden. Bekommst Du die? Oder etwas anderes? Wenn ja, was?
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

Danke für den Tipp mit der Konsole...dein bsp läuft nun...die pfade der flup dateien waren falsch...meine datei leider nicht...bekomme einen 500 internal server, wenn ich die datei vom browser öffne. Kann ich einen pfad über die konsole direkt angeben ? sowas wie python test.py/hello/ ? um etwas debugen zu können? oder gibts eine andere möglichkeit heraus zu finden woher der fehler kommt?
BlackJack

@DanJJo: Kommt die Fehlerseite vom Webserver oder von Bottle? Wenn sie vom Apache kommt, dann steht Apache und die Apache-Version unten auf der Seite. Wenn sie von Bottle kommt, dann ist ein Rahmen um die Seite und der Fehlertext steht noch einmal in einem grau hinterlegten Kasten auf der Seite.

Falls die Seite von Bottle kommt, könntest Du bei `run()` noch ``debug=True`` mit übergeben. Dann bekommst Du zum Beispiel Ausnahmen und Tracebacks angezeigt. *Achtung*: Das sollte man nur während der Fehlersuche aktivieren, denn das ist eine Sicherheitslücke weil in den Tracebacks Quelltextfragmente der Anwendung stehen. Und man sollte im Quelltext deshalb auch keine wichtigen Daten stehen haben, wie beispielsweise Zugangsdaten zu einer Datenbank oder ähnliches.
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

Die Fehlermeldung kommt von bottle. Hab debug=True ind die run eingetragen aber der fehler wird nicht "genauer" beschrieben. es ist immer noch der 500 Internal server Error.

Wenn ich debug local laufen lasse kommt nichts an Fehlermeldungen...

Vllt liegt der Fehler ja an der DB oder an den Importen ? hier mal der Anfang meiner Main.py

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os, sys, re
import smtplib
import hashlib
from datetime import datetime, date, timedelta
from bottle_sqlite import SQLitePlugin
from os import urandom
from base64 import b64encode, b64decode
from itertools import izip
from bottle import route, run, install, template, static_file, get, post, request, response, time, datetime
# From https://github.com/mitsuhiko/python-pbkdf2
from pbkdf2 import pbkdf2_bin

install(SQLitePlugin(dbfile="Datenbank.db"))

....

die benötigten scripte liegen auch alle in fcgi-bin sodass er eigentlich darauf zugriff haben müsste. :K
BlackJack

@DanJJo: Hast Du die FCGI-Prozesse auch beendet bevor Du das geänderte Skript getestet hast? Wenn die erst einmal laufen, dann haben Änderungen an den bereits geladenen Modulen keinen Einfluss bis sie neu gestartet werden.
Antworten