Ошибка 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 не связан с 'localhost'. Что это может быть?

Ответы

Ответ 1

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

В Linux выполните:

netstat -pnl | grep 8080

И посмотрите, какой процесс прослушивает 8080

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

Ответ 2

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

Ответ 4

Я столкнулся с этой проблемой вчера на сервере Linux Ubuntu. Я потратил пару часов, пытаясь отследить ошибку в коде 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.

Ответ 5

  • Используйте его на другом порту (например, 8000)
  • Читайте о ConfigApi (еще раз)
  • Попробуйте последнюю версию, не 3.0
  • Также это может быть вызвано некоторыми брандмауэрами Windows (безопасная безопасность Eset или, возможно, другая). Поэтому просто используйте его на другом порту.

Ответ 6

Я думаю, что у меня была аналогичная проблема, когда я начал использовать 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 и CherryPy 3.1.1, и я запускаю script с помощью -W ignore:

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

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

Ответ 7

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

sudo lsof -i :8080

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

Ответ 8

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

Ответ 9

У меня была такая же проблема при запуске CherryPy 3.2.2 на моем компьютере с Windows 7 с Python 3.3 Сервер запустится нормально, а затем произойдет сбой примерно через пару минут.

Я применил патч от CherryPy 3.2.3, упомянутый лавразия. Но это не помогло.

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

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