【问题标题】:Python Tornado Application Error h10 (path= favicon.icon) [closed]Python Tornado 应用程序错误 h10(路径 = favicon.icon)[关闭]
【发布时间】:2014-08-13 00:29:12
【问题描述】:

tengo una aplicación servida por Tornado web server que funciona a la perfección en local pero al deployar a heroku y abrir la aplicación remota aparecen los siguientes errores:

←[36m2014-08-12T20:30:58.116068+00:00 heroku[web.1]:←[0m State changed from star
ting to crashed
←[36m2014-08-12T20:30:58.217271+00:00 heroku[web.1]:←[0m Process exited with sta
tus 1
←[36m2014-08-12T22:01:31.695755+00:00 heroku[web.1]:←[0m State changed from cras
hed to starting
←[36m2014-08-12T22:01:35.341509+00:00 heroku[web.1]:←[0m Starting process with c
ommand `gunicorn server:app`
←[36m2014-08-12T22:01:37.670660+00:00 heroku[web.1]:←[0m Process exited with sta
tus 3
←[36m2014-08-12T22:01:37.681359+00:00 heroku[web.1]:←[0m State changed from star
ting to crashed
←[33m2014-08-12T23:58:02.760950+00:00 heroku[router]:←[0m at=error code=H10 desc
="App crashed" method=GET path="/" host=positioning-proof.herokuapp.com request_
id=598ba92c-90fc-4382-a7de-fdbb302d3787 fwd="88.11.13.191" dyno= connect= servic
e= status=503 bytes=
←[33m2014-08-12T23:58:03.074720+00:00 heroku[router]:←[0m at=error code=H10 desc
="App crashed" method=GET path="/favicon.ico" host=positioning-proof.herokuapp.c
om request_id=5095e0c0-d720-4af5-992b-d92c40df2302 fwd="88.11.13.191" dyno= conn
ect= service= status=503 bytes=

El servidor Tornado de la aplicación es el siguiente:

import datetime
import time

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.template import Template

import sys
import os, uuid
import json

from Util.File import *
from Util.Area import *

portNumber = int(8888)

from tornado.options import define, options

define("port", default=portNumber, help="run on the given port", type=int)

__UPLOADS__ = "uploads/"

class Application(tornado.web.Application):
        def __init__(self):
                handlers = [
                        (r"/main", mainHandler),
                        (r"/sentPolygon", formHandler),
                        (r'/JS/(.*)', tornado.web.StaticFileHandler, {'path': 'JS/'}),
                        (r'/Libs/jquery/(.*)', tornado.web.StaticFileHandler, {'path':         'Libs/jquery/'}),
                        (r'/Libs/jquery/css/(.*)', tornado.web.StaticFileHandler, {'path':    'Libs/jquery/css/'}),
            ]

                settings = dict(
                        autoescape=None,
                )

                tornado.web.Application.__init__(self, handlers, **settings)


class mainHandler(tornado.web.RequestHandler):

    def initialize(self):
        self.errores = ''
        self.name = ''

    def get(self):
        self.render("main.html", error=self.errores, nombreFichero=self.name)

class formHandler(tornado.web.RequestHandler):

    def initialize(self):
        self.extensiones = [".txt"]
        self.name = self.request.arguments.get("name")[0]
        self.fileinfo = self.request.files['filearg'][0]
        self.fname = self.fileinfo['filename']
        self.extn = os.path.splitext(self.fname)[1]
        self.namee = os.path.splitext(self.fname)[0]
        self.errores = ''

    def get(self):
         self.render("main.html", error="", nombreFichero="")

    def post(self):
        errores = self.errores
        #Guardado del fichero del polígono. (NO NECESARIO)
        """cname = str(uuid.uuid4()) + extn
        fh = open(__UPLOADS__ + cname, 'w')
        fh.write(fileinfo['body'])"""
        #Validación:
        if self.name == '':
            errores = errores + 'Nombre del Pol\u00edgono est\u00e1 vac\u00edo.<br>'
        if self.extn not in self.extensiones:
            errores = errores + 'Extensi\u00f3n de archivo err\u00f3nea. Extensiones soportadas:     '+self.extensiones+'<br>'
        #Creación del poígono o errores. Volver al formulario si los hay.
        resFile = stringToPolygon(self.fileinfo['body'])
        if isinstance(resFile, str):
            errores = errores + resFile
            self.render("main.html", error=errores, nombreFichero=self.name)
        else:
            ini = time.time()

            #Optimizamos el polígono.
            polyOpt = resFile.optimiza()
            polyOrd = polyOpt.ordena()
            areasVar = []
            areas = []
            puntosPoligono = []
            #Posiciones topográficas
            for p in polyOrd.getCoordenadas():
                puntosPoligono.append(vars(p))

            posiciones = posicionesTopograficas(polyOrd)

            #Áreas
            for ps in posiciones:
                a = areaOptima(polyOrd, ps)
                areas.append(a)
                l = []
                for ar in a.getCoordenadas():
                    l.append(vars(ar))
                areasVar.append(l);
            number = len(areasVar)

            #Intersecciones
            interseccionesVar = []
            inters = intersecciones(areas)
            for inter in inters:
                l2 = []
                for coorde in inter.getCoordenadas():
                    l2.append(vars(coorde))
                interseccionesVar.append(l2)
            numberInter = len(inters)
            fin = time.time()
            tiempo = str(round(fin - ini, 3))+" segundos"
            print("#####################################")
            print(self.name+" ha sido enviado con éxito")
            print("#####################################")
            #Creación de la escala.
            porcentajeAbscisa = (polyOrd.coordenadaMayorAbscisa().getX() - 
                          polyOrd.coordenadaMenorAbscisa().getX()) * 0.2
            porcentajeOrdenada = (polyOrd.coordenadaMayorOrdenada().getY() -
                          polyOrd.coordenadaMenorOrdenada().getY()) * 0.2
            minimaX = polyOrd.coordenadaMenorAbscisa().getX() - porcentajeAbscisa
            maximaX = polyOrd.coordenadaMayorAbscisa().getX() + porcentajeAbscisa
            minimaY = polyOrd.coordenadaMenorOrdenada().getY() - porcentajeOrdenada
            maximaY = polyOrd.coordenadaMayorOrdenada().getY() + porcentajeOrdenada
            escalas = []
            escalas.append(minimaX)
            escalas.append(maximaX)
            escalas.append(minimaY)
            escalas.append(maximaY)

            #Envío al cliente.
            self.render("index.html", coordsPoly = polyOrd, puntosVision = posiciones,
                        numeroAreas = number, numeroIntersecciones = numberInter,
                        nombreFichero=self.namee, 
                        poligono = json.dumps(puntosPoligono, sort_keys= True), 
                        zonasVision = areas,
                        intersec = inters,
                        visiones = json.dumps(areasVar, sort_keys = True), 
                        intersecciones = json.dumps(interseccionesVar),
                        escala = json.dumps(escalas, sort_keys = True), 
                        tejecucion=tiempo)

def main():
        tornado.options.parse_command_line()
        http_server = tornado.httpserver.HTTPServer(Application())
        http_server.listen(options.port)
        tornado.ioloop.IOLoop.instance().start()

 if __name__ == "__main__":
        main()

En el Procfile: web: gunicorn app:positioning-top He probado sin usar gunicorn utilizando: web: python server.py, pero spray el mismo problema.

【问题讨论】:

  • 嗨,@user3280335,您找到解决问题的方法了吗?
  • 请在 Stack Overflow 上使用English onlySpanish Language 还有另一个版本的 Stack Overflow。

标签: python tornado favicon


【解决方案1】:

我想您收到此错误是因为您的根路径 (/) 没有 handler

尝试以下方法:

class Application(tornado.web.Application):
        def __init__(self):
                handlers = [
                        (r"/main", mainHandler),
                        (r"/sentPolygon", formHandler),
                        (r'/JS/(.*)', tornado.web.StaticFileHandler, {'path': 'JS/'}),
                        (r'/Libs/jquery/(.*)', tornado.web.StaticFileHandler, {'path': 'Libs/jquery/'}),
                        (r'/Libs/jquery/css/(.*)', tornado.web.StaticFileHandler, {'path': 'Libs/jquery/css/'}),
                        (r'/(.*)', tornado.web.StaticFileHandler, {'path': '/'}),
            ]

这个:

class Application(tornado.web.Application):
        def __init__(self):
                path_to_favicon = '/favicon.ico'
                handlers = [
                        (r"/main", mainHandler),
                        (r"/sentPolygon", formHandler),
                        (r'/JS/(.*)', tornado.web.StaticFileHandler, {'path': 'JS/'}),
                        (r'/Libs/jquery/(.*)', tornado.web.StaticFileHandler, {'path': 'Libs/jquery/'}),
                        (r'/Libs/jquery/css/(.*)', tornado.web.StaticFileHandler, {'path': 'Libs/jquery/css/'}),
                        (r'/favicon.ico', tornado.web.StaticFileHandler, {'path': path_to_favicon}),
            ]

我找到了与类似问题相关的问题:
How to serve static files from a different directory than the static path?

【讨论】:

    猜你喜欢
    • 2021-02-20
    • 1970-01-01
    • 2016-08-20
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    相关资源
    最近更新 更多