2009-04-20 51 views
13

Cuando estoy corriendo CherryPy Hello World:CherryPy Hello World error

import cherrypy 

class HelloWorld: 
    def index(self): 
     return "Hello world!" 
    index.exposed = True 

cherrypy.config.update({'server.socket_port': 8080,}) 
cherrypy.quickstart(HelloWorld()) 

... me sale esto: IOError: Port 8080 no está obligado a 'localhost'. ¿Qué podría ser?

+0

He enfrentado este problema antes. Espero que esta pregunta ayude a alguien. –

Respuesta

7

Probablemente haya escuchado algo más en ese puerto.

En Linux hacer:

netstat -pnl | grep 8080 

y ver lo que está escuchando en el proceso de 8080

En Windows usar algo como TCPView a hacer lo mismo.

1
  • usarlo en otro puerto (8000 por ejemplo)
  • leer sobre ConfigApi (una vez más)
  • Trate última versión no 3.0
  • También esto puede ser causado por algún servidor de seguridad de Windows (Eset Smart Security o tal vez otro). Así que solo úsala en un puerto diferente.
1

Creo que tuve un problema similar cuando empecé a usar CherryPy ... Pero no puedo recordar exactamente lo que era ... Pero la solución implicó el uso de un archivo de configuración en lugar de pasar las configuraciones de la mano:

MyProj.conf:

 
[global] 
server.socket_host = "127.0.0.1" 
server.socket_port = 8080 
server.thread_pool = 10 

MyProj.py

import os 
import cherrypy 

class HelloWorld: 
    def index(self): 
     return "Hello world!" 
    index.exposed = True 

# Assumes the config file is in the directory as the source.  
conf_path = os.path.dirname(os.path.abspath(__file__)) 
conf_path = os.path.join(conf_path, "MyProj.conf") 
cherrypy.config.update(conf_path) 
cherrypy.quickstart(HelloWorld()) 

Esto definitivamente trabaja aquí.
estoy usando Python 2.6.1 y 3.1.1 CherryPy y ejecutar el script con -W ignore:

 
c:\My_path> python -W ignore MyProj.py 

Si es menor de * nix, usted debe poner el -W ignore en el comentario #! en la parte superior del archivo.

+0

El "-W ignorar" se debe a que CherryPy 3.1.1 no está completamente preparado para Python 2.6; pero sigue siendo lo suficientemente bueno para nuestras necesidades internas aquí. – joce

0

AVG Anti-Virus estaba causando este problema para mí. La desinstalación de AVG (lejos de ser ideal) hizo el truco. Sospecho que el escáner de enlaces que no pude deshabilitar.

2

Me encontré con este problema ayer en un servidor Ubuntu Linux. Pasé un par de horas tratando de encontrar el error en el código CherryPy antes de darme cuenta de que el mensaje de error es muy genérico. Dará este mensaje de error incluso si el host no posee la dirección IP a la que el servidor intenta enlazar. En mi caso, la interfaz loopback (lo, 127.0.0.1) estaba deshabilitada. Por lo tanto, incluso si configuro server.socket_host='0.0.0.0', el intento de verificar el puerto, wait_for_occupied_port, fallaría (ya que supone, razonablemente, que la interfaz de bucle invertido siempre está disponible). Después de volver a habilitar la interfaz loopback, el servidor CherryPy se iniciará normalmente.

Actualización: CherryPy 3.2.3 tiene una solución para este problema en particular. Hasta que se publique 3.2.3, las compilaciones de desarrollo están disponibles en el CherryPy project downloads.

9

Si usted está tratando de implementar CherryPy en Heroku, donde no se puede utilizar el bucle de retorno para comprobar si realmente se ha abierto un puerto, entonces necesita sólo tiene que desactivar la función de CherryPy wait_for_occupied_port() por lo que el auto de CherryPy la verificación de consistencia no decide que, de hecho, no ha podido iniciarse. Estas son las tres líneas que utilizo para fijar CherryPy para que se ejecute en Heroku:

from cherrypy.process import servers 
    def fake_wait_for_occupied_port(host, port): return 
    servers.wait_for_occupied_port = fake_wait_for_occupied_port 
+1

Aunque es extremadamente útil, esta respuesta realmente no pertenece aquí, ya que tiene muy poco que ver con la pregunta original del OP. En este caso, es más apropiado formular una pregunta más detallada y específica a tu muy valiosa respuesta, __ahora, por supuesto, responde :). Me doy cuenta de que otros tienen respuestas similares a esta pregunta aquí ... pero es más un secuestro de hilos que cualquier cosa. –

+3

Mi respuesta implica ejecutar el script ** exacto ** y obtener ese error ** exacto **. No veo cómo eso tiene "muy poco que ver" con la pregunta. Puede ver en la respuesta de @laurasia que otros piensan que mi respuesta también es relevante para esta pregunta. –

+1

Sí, acabo de confirmar que __do__ me da IOError y ChannelFailures: IOError, a veces, y algunas veces acabo de obtener SIGTERM. Entonces, tienes razón, estaba equivocado sobre el comentario "muy poco que hacer". La falta del error a veces fue la causa de mi confusión. Todavía me inclinaría un poco hacia un nuevo hilo;) –

0

que tenían el mismo problema cuando se ejecuta CherryPy 3.2.2 en mi PC Win7 con Python 3.3 El servidor comenzaría normalmente y luego colapsaría en unos minutos.

He aplicado el patch de CherryPy 3.2.3 laurasia mencionado. Pero no ayudó.

así que tuve que comentar las líneas que crían el error al final de python\Lib\site-packages\cherrypy\process\servers.py evitar que el servidor de la muerte:

... 
# if host == client_host(host): 
#  raise IOError("Port %r not bound on %r" % (port, host)) 
... 
+0

Tuve el mismo problema, con la misma configuración, solo en OS X. Acabo de comentar la última línea en el mismo archivo. 'raise IOError (" Port% r no vinculado a% r "% (port, host))' –

1

Si estás en OS X, intente llamar:

sudo lsof -i :8080 

que le dirá el proceso utilizando ese puerto.