La implementación de un Frasco de aplicación el uso de la Pasta de
Pregunta
Estoy construyendo un servicio web mediante el Matraz y estoy tratando de implementar un simple "Hola, Mundo" de la aplicación usando el Parche.Estoy teniendo problemas para tener todo configurado para trabajar juntos a pesar de.He visto el Google golpe sobre la ejecución de la cantimplora con pasta de usar virtualenv y zcbuildout, pero que parece que es una exageración para un buen punto de aplicación.Ahora, cuando trato de cargar una dirección URL con mi aplicación, me sale este error:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/paste/httpserver.py", line 1068, in process_request_in_thread
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.7/SocketServer.py", line 639, in __init__
self.handle()
File "/usr/lib/python2.7/dist-packages/paste/httpserver.py", line 442, in handle
BaseHTTPRequestHandler.handle(self)
File "/usr/lib/python2.7/BaseHTTPServer.py", line 343, in handle
self.handle_one_request()
File "/usr/lib/python2.7/dist-packages/paste/httpserver.py", line 437, in handle_one_request
self.wsgi_execute()
File "/usr/lib/python2.7/dist-packages/paste/httpserver.py", line 287, in wsgi_execute
self.wsgi_start_response)
AttributeError: GraffitiApp instance has no __call__ method
Mi configuración de la aplicación se ve como:
[DEFAULT]
loglevel = WARN
browser_cache_ttl = 30
[app:main]
use = egg:GraffitiService
[server:main]
use = egg:Paste#http
host = 0.0.0.0
port = %(graffiti_port)s
Mi código de la aplicación se ve como:
from flask import Flask
app = Flask(__name__)
app.debug = True
class GraffitiApp:
@app.route('/')
def hello_world():
return "Hello World!"
@app.route('/other')
def other_page():
return "Other page!"
def main():
app.run(debug = True)
if __name__ == "__main__":
app.run(debug = True)
Qué necesito para crear una __call__()
método y mapa en cualquier dirección URL se pasa a la función apropiada, o hay un cambio tengo que hacer a mi configuración?
EDITAR
Estoy usando una empresa de nombre main.py como resultado de los errores que estaba recibiendo acerca de no encontrar un punto de entrada denominado "principal":
import logging
from graffiti import GraffitiApp
def make_app(globalArgs, **localArgs):
loglevelname = globalArgs.get("loglevel", "INFO").lower()
if loglevelname == 'critical':
loglevel = logging.CRITICAL
elif loglevelname == 'debug':
loglevel = logging.DEBUG
elif loglevelname == 'error':
loglevel = logging.ERROR
elif loglevelname == 'fatal':
loglevel = logging.FATAL
elif loglevelname == 'info':
loglevel = logging.INFO
elif loglevelname == 'warn' or loglevelname == 'warning':
loglevel = logging.WARN
else:
loglevel = logging.NOTSET
loglevelname = 'notset'
FORMAT = "%(asctime)s %(name)s %(levelname)s %(message)s"
logging.basicConfig(format = FORMAT, level = loglevel)
logging.info("Log level set to %s" % (loglevelname.upper()))
return GraffitiApp()
Solución
Parece que el servidor está tratando de ejecutar su GraffitiApp()
la clase cuando se debe ejecutar el Flask()
ejemplo app
.
Otros consejos
OFFTOP (lo siento, pero su código rompe mis ojos):
import logging
from graffiti import GraffitiApp
def make_app(globalArgs, **localArgs):
loglevelname = globalArgs.get("loglevel", "INFO")
loglevel = getattr(logging, loglevelname.upper(), logging.NOTSET)
FORMAT = "%(asctime)s %(name)s %(levelname)s %(message)s"
logging.basicConfig(format = FORMAT, level = loglevel)
logging.info("Log level set to %s" % (loglevelname))
return GraffitiApp()