2015-03-06 1 views
0

У меня проблемы с настройкой глобальной ошибки 404 на моем сервере cherryPy.Общая конфигурация cherryPy - costume 404 error -

Это мой код.

import cherrypy 
import os,os.path 

import view.costume_functions as cf 
import model.database as db 
import temp.template as tm 

class Maple_syrup_project(object): 

    @cherrypy.expose 
    def index(self): 

     query = db.get_racks() 
     estado = {} 

     for rack in query: 
      ip_address = rack[1] 
      key = rack[0] 
      estado[key] = cf.estado_actal(ip_address) 

     return tm.rack_all(query,estado) 

    @cherrypy.expose 
    def configurar(self,**post): 
     comando = cf.comando(post) 
     rack_id = post['rack_id'] 
     ip_address = db.get_ip(rack_id); 
     respuesta = cf.connection(ip_address,comando) 
     return comando 
     return 'configurando...'+comando+'....'+respuesta 

def error_page_404(status, message, traceback, version): 
     return ('Oppps Error') 

cherrypy.root = Maple_syrup_project() 

if __name__=='__main__': 
    configurations = { 
     '/':{ 
      'tools.staticdir.root':os.path.abspath(os.getcwd()) 
     }, 
     '/static':{ 
      'tools.staticdir.on':True, 
      'tools.staticdir.dir':'./static' 
     } 
    } 

    cherrypy.config.update({'server.socket_port':9999, 
          'server.socket_host':'0.0.0.0', 
          'error_page.404': error_page_404, 
          }) 

    cherrypy.tree.mount(Maple_syrup_project(), 
         '/control_de_retornos', 
         configurations) 

    cherrypy.engine.start() 
    cherrypy.engine.block() 

Если я указываю мой браузер ХТ ..: // ....: 9999/control_de_retornos/ххххх Я получил ожидаемый ошибка костюма по электронной почте Ой ошибки. если я укажу свой браузер на ht ..: // ....: 9999/или ht ..: // ....: 9999/xxxxx У меня есть пустая страница с кодом состояния: 404 не найдено в заголовках, но это не моя ошибка в костюме.

Любые идеи о том, что происходит? Спасибо.

ответ

0

попробовать что-то вроде этого ...

import cherrypy 
import os,os.path 

class Maple_syrup_project(object): 

    class control_de_retornos(object): 
     @cherrypy.expose 
     def index(self): 

      return 'hi' 

     @cherrypy.expose 
     def configurar(self,**post): 
      return 'configurando...' 

def error_page_404(status, message, traceback, version): 
     return ('Oppps Custom Error') 

cherrypy.root = Maple_syrup_project() 

if __name__=='__main__': 
    configurations = { 
     '/':{ 
      'tools.staticdir.root':os.path.abspath(os.getcwd()), 
      'server.socket_port':9999, 
      'server.socket_host':'0.0.0.0', 
      'error_page.404': error_page_404, 
     }, 
     '/static':{ 
      'tools.staticdir.on':True, 
      'tools.staticdir.dir':'./static' 
     } 
    } 

    cherrypy.tree.mount(Maple_syrup_project(), 
         '/', 
         configurations) 

    cherrypy.engine.start() 
    cherrypy.engine.block() 

error_page_404 должен быть отделен Maple_syrup_project и не является частью "класса control_de_retornos (объект):". теперь, когда я иду в корень вашего пути, я получаю «Oppps Custom Error». Надеюсь, это поможет!

+0

Спасибо за ваш комментарий. Это не работает. Я считаю, что это не сработало, потому что конфигурации {} предназначены для настройки моего приложения, а не глобального сервера. –

+0

ты за веб-сервером? –

+0

ну, только червивый сервер, который запускается при запуске моего файла –

0

Спасибо Эндрю Kloos

я решил его добавить еще один класс, который монтируется на «/» и обрабатывает ошибку

import cherrypy 
import os,os.path 

import view.costume_functions as cf 
import model.database as db 
import temp.template as tm 

class Maple_syrup_project(object): 

    @cherrypy.expose 
    def index(self): 
     racks = db.get_racks() 
     rack_collection = {} 
     bson = {} 

     for rack in racks: 
      ip_address = rack[1] 
      try: 
       estado = cf.estado_actal(ip_address) 
      except: 
       return ('Opsss..... Error....... Verificar que los racks esten encendidos y bien conectados ala red') 

      nombre = db.get_optos_name(ip_address) 
      opto_collection = cf.create_bson(estado,nombre,rack) 
      rack_collection['rack_'+str(rack[0])] = opto_collection 

     bson['racks'] = rack_collection 

     return tm.rack_all(bson) 

    @cherrypy.expose 
    def configurar(self,**post): 
     comando = cf.comando(post) 
     rack_id = post['rack_id'] 
     ip_address = db.get_ip(rack_id); 
     respuesta = cf.connection(ip_address,comando) 

     return 'configurando...'+comando+'....'+respuesta 

class Index(object): 
    pass 

def error_page_404(status, message, traceback, version): 
    return ('Oppps Error') 


if __name__=='__main__': 
    configurations = { 
     '/':{ 
      'tools.staticdir.root':os.path.abspath(os.getcwd()) 
     }, 
     '/static':{ 
      'tools.staticdir.on':True, 
      'tools.staticdir.dir':'./static' 
     } 
    } 

    cherrypy.config.update({'server.socket_port':9998, 
          'server.socket_host':'0.0.0.0', 
          'error_page.404': error_page_404 
          }) 

cherrypy.tree.mount(Maple_syrup_project(),'/control_de_retornos',configurations) 
cherrypy.tree.mount(Index(),'/',configurations) 

cherrypy.engine.start() 
cherrypy.engine.block()