2009-04-20 7 views
13

Когда я бег CherryPy Hello World:CherryPy Hello World ошибка

import cherrypy 

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

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

... Я получаю это: IOError: Порт 8080 не связан с 'локальными'. Что бы это могло быть?

+0

Я столкнулся с этой проблемой раньше. Надеюсь, этот вопрос поможет кому-то. –

ответ

7

Возможно, у вас есть что-то другое, слушающее этот порт.

В Linux сделать:

netstat -pnl | grep 8080 

И увидеть, что процесс прослушивает 8080

В Windows использовать что-то вроде TCPView сделать то же самое.

1
  • Используйте его на другой порт (8000, например)
  • Читайте о ConfigApi (еще раз)
  • Попробуйте последнюю версию не 3,0
  • Кроме того, это может быть вызвано какой-то брандмауэр Windows (Eset Smart Security или, возможно, другое). Поэтому просто используйте его на другом порту.
1

Я думаю, что у меня была аналогичная проблема, когда я начал использовать CherryPy ... Но я не помню точно, что это было ... Но исправление включало использование файла конфигурации вместо передачи конфигураций вручную:

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

Это, безусловно, работает здесь.
Я использую Python 2.6.1 и 3.1.1 CherryPy и я запустить скрипт с -W ignore:

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

Если вы находитесь под * NIX, вы должны поставить -W ignore в #! комментарии в заголовке файла.

+0

«-W ignore» - это потому, что CherryPy 3.1.1 не полностью готов к Python 2.6; но он по-прежнему достаточно хорош для наших внутренних потребностей. – joce

0

AVG Anti-Virus вызывал эту проблему для меня. Деинсталляция AVG (далека от идеала) сделала трюк. Я подозреваю, что сканер ссылок я не могу отключить.

2

Я столкнулся с этой проблемой вчера на сервере Ubuntu Linux. Я потратил пару часов, пытаясь отследить ошибку в коде CherryPy, прежде чем я понял, что сообщение об ошибке очень общее. Он выдаст это сообщение об ошибке, даже если хост не имеет IP-адрес, к которому пытается подключиться сервер. В моем случае интерфейс loopback (lo, 127.0.0.1) был отключен. Таким образом, даже если я установил server.socket_host='0.0.0.0', попытка проверить порт, wait_for_occupied_port, потерпит неудачу (поскольку он предполагает, что разумно, что интерфейс loopback всегда доступен). После повторного включения интерфейса loopback сервер CherryPy запустится нормально.

Обновление: CherryPy 3.2.3 имеет исправление для данной конкретной проблемы. Пока не выпущен 3.2.3, сборки разработки доступны на CherryPy project downloads.

9

Если вы пытаетесь развернуть CherryPy на Heroku, где вы не можете использовать обратную петлю, чтобы проверить, были ли на самом деле открыл вам порт, то вам нужно просто отключить wait_for_occupied_port() функцию CherryPy, так что само CherryPy в -consistency check не решает, что на самом деле он не запускался. Вот три строки, которые я использую, чтобы исправить CherryPy так, что он работает на 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

Несмотря на то, что этот ответ очень полезен, этот ответ действительно не принадлежит здесь, поскольку он имеет очень мало общего с исходным вопросом OP. В этом случае более подходящим для __ask__ является более подробный и конкретный вопрос к вашему очень ценному ответу, __then__, конечно, ответьте на него :). Я понимаю, что у других есть похожие ответы на этот вопрос здесь ... но это больше из-за хиджака, чем-то. –

+3

Мой ответ включает в себя запуск этого ** точного ** скрипта и получение этой ** точной ** ошибки. Я не вижу, как это «очень мало что нужно сделать» с вопросом. Вы можете видеть из ответа @ laurasia, что другие считают мой ответ соответствующим этому вопросу. –

+1

Да, только что подтвердил. __do__ получить IOError и ChannelFailures: IOError, иногда, а иногда я просто получаю SIGTERM. Итак, вы правы, я ошибался в комментарии «очень мало, чтобы делать». Иногда ошибка была причиной моей путаницы. Я все еще немного наклоняюсь к новой нити;) –

0

У меня была та же проблема при работе CherryPy 3.2.2 на моем ПК Win7 с Python 3.3 Сервер будет начать нормально и затем крутится примерно через пару минут.

Я применил patch от CherryPy 3.2.3 laurasia. Но это не помогло.

Так что мне пришлось закомментировать строки, поднимающие ошибку в самом конце python\Lib\site-packages\cherrypy\process\servers.py, чтобы предотвратить сервер от смерти:

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

У меня была такая же проблема, с той же настройкой, только на OS X. Я просто прокомментировал последнюю строку в том же файле. 'raise IOError (« Порт% r не связан на% r »% (порт, хост))' –

1

Если вы на OS X, попробуйте позвонить:

sudo lsof -i :8080 

, который расскажет вам процесс, используя этот порт.