Pergunta

Quando eu estou correndo CherryPy Olá Mundo:

import cherrypy

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

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

... fico com esta: IOError: Porto 8080 não ligado na 'localhost'. O que poderia ser?

Foi útil?

Solução

Você provavelmente tem algo mais escuta nessa porta.

No Linux fazer:

netstat -pnl | grep 8080

E ver qual processo está escutando em 8080

No Windows use algo como TCPView a fazer o mesmo.

Outras dicas

Se você está tentando implantar CherryPy no Heroku, onde você não pode usar o auto-retorno para verificar se você realmente abriu uma porta, então você precisa para simplesmente desativar a função wait_for_occupied_port() do CherryPy para que cheque auto-consistência do CherryPy não decidir que tem, de fato, falhou ao iniciar. Aqui estão as três linhas que eu uso para corrigir CherryPy para que seja executada em 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

Como Jason R. Coombs escreveu há um problema com pessoas com deficiência de auto-retorno dispositivo. heroku.com desativou auto-retorno, portanto, CherryPy irá falhar. I arquivou um bug para este .

Update: reportado como resolvida

.

Eu corri para este problema ontem em um servidor Ubuntu Linux. Passei um par de horas tentando rastrear o bug no código CherryPy antes de eu percebi que a mensagem de erro é muito genérico. Ele vai dar a esta mensagem de erro mesmo se o anfitrião não possui o endereço IP ao qual o servidor está a tentar ligar. No meu caso, a interface loopback (lo, 127.0.0.1) foi desativado. Assim, mesmo se eu definir server.socket_host='0.0.0.0', a tentativa de verificar a porta, wait_for_occupied_port, seria um fracasso (como ele assume, razoavelmente, que a interface de auto-retorno está sempre disponível). Depois de reativar a interface de auto-retorno, o servidor CherryPy iria começar a funcionar normalmente.

Update: CherryPy 3.2.3 tem uma correcção para este problema particular. Até 3.2.3 é liberado, o desenvolvimento constrói estão disponíveis nos CherryPy .

  • Use-o em porta diferente (8000, por exemplo)
  • Leia sobre ConfigApi (mais uma vez)
  • Tente última versão não 3.0
  • Também isso pode ser causado por algum firewall do Windows (segurança inteligente Eset ou talvez outro). Então, basta usá-lo na porta diferente.

Eu penso que eu tive um problema semelhante quando eu comecei usando CherryPy ... Mas eu não me lembro exatamente o que era ... Mas a correção envolveu o uso de um arquivo de configuração em vez de passar as configurações manualmente:

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())

Este definitivamente funciona aqui.
Eu estou usando Python 2.6.1 e 3.1.1 CherryPy e eu executar o script com -W ignore:

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

Se você está sob * nix, você deve colocar o -W ignore no comentário #! no topo do arquivo.

Se você está no OS X, tente chamar:

sudo lsof -i :8080

que lhe dirá o processo usando essa porta.

AVG Anti-Virus estava causando este problema para mim. Desinstalar o AVG (longe do ideal) fez o truque. Eu suspeito que o scanner link que eu não poderia desativar.

Eu tive o mesmo problema ao executar CherryPy 3.2.2 no meu Win7 PC com o Python 3.3 O servidor iria começar normalmente e, em seguida, iria falhar em cerca de um par de minutos.

Eu tenho aplicado a remendo de CherryPy 3.2.3 laurasia mencionado. Mas isso não ajuda.

Então eu tinha que comentar as linhas de levantar o erro no final de python\Lib\site-packages\cherrypy\process\servers.py para impedir que o servidor de morrer:

...
#    if host == client_host(host):
#        raise IOError("Port %r not bound on %r" % (port, host))
...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top