Ответ 1
Возможно, у вас есть что-то еще, прослушивающее этот порт.
В Linux выполните:
netstat -pnl | grep 8080
И посмотрите, какой процесс прослушивает 8080
В Windows используйте что-то вроде TCPView, чтобы сделать то же самое.
Когда я запускаю 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'. Что это может быть?
Возможно, у вас есть что-то еще, прослушивающее этот порт.
В Linux выполните:
netstat -pnl | grep 8080
И посмотрите, какой процесс прослушивает 8080
В Windows используйте что-то вроде TCPView, чтобы сделать то же самое.
Если вы пытаетесь развернуть 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
Как Джейсон Р. Кумбс написал, что есть проблема с отключенным устройством loopback. heroku.com отключен loopback, поэтому CherryPy выйдет из строя. я подал ошибку для этого.
Обновление: Сообщено как разрешено.
Я столкнулся с этой проблемой вчера на сервере 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.
Я думаю, что у меня была аналогичная проблема, когда я начал использовать 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
в комментарий #!
в верхней части файла.
Если вы находитесь на OS X, попробуйте позвонить:
sudo lsof -i :8080
который расскажет вам процесс с использованием этого порта.
Антивирус AVG вызывал эту проблему для меня. Деинсталляция AVG (далека от идеала) сделала трюк. Я подозреваю, что сканер ссылок я не могу отключить.
У меня была такая же проблема при запуске 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))
...