13

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' にバインドされていません。どうなり得るか?

4

10 に答える 10

9

ループバックを使用して実際にポートを開いたかどうかを確認できないHerokuにCherryPyをデプロイしようとしている場合は、CherryPyのwait_for_occupied_port()機能を無効にして、CherryPyの自己整合性チェックで実際にポートが開いていると判断されないようにする必要があります。 、 起動に失敗しました。CherryPyをHerokuで実行するように修正するために使用する3行は次のとおりです。

    from cherrypy.process import servers
    def fake_wait_for_occupied_port(host, port): return
    servers.wait_for_occupied_port = fake_wait_for_occupied_port
于 2012-02-14T03:28:22.327 に答える
7

おそらく、そのポートでリッスンしている何かが他にあるでしょう。

Linux では次のようにします。

netstat -pnl | grep 8080

そして、8080でリッスンしているプロセスを確認します

Windows では、TCPViewなどを使用して同じことを行います。

于 2009-04-20T09:57:38.253 に答える
3

Jason R. Coombsが書いたように、無効化されたループバック デバイスには問題があります。heroku.com ではループバックが無効になっているため、CherryPy がクラッシュします。これについてバグを報告しました。

更新:解決済みとして報告されました。

于 2011-10-28T20:25:38.320 に答える
2

昨日、Ubuntu Linux サーバーでこの問題に遭遇しました。エラーメッセージが非常に一般的であることに気付く前に、CherryPy コードのバグを追跡するのに数時間費やしました。サーバーがバインドしようとしている IP アドレスをホストが所有していない場合でも、このエラー メッセージが表示されます。私の場合、ループバック インターフェイス (lo、127.0.0.1) が無効になっていました。したがって、 を設定server.socket_host='0.0.0.0'しても、ポート をチェックしようwait_for_occupied_portとしても失敗します (ループバック インターフェイスが常に利用可能であると合理的に想定されているため)。ループバック インターフェイスを再度有効にすると、CherryPy サーバーは正常に起動します。

更新: CherryPy 3.2.3 には、この特定の問題に対する修正があります。3.2.3 がリリースされるまで、CherryPy プロジェクトのダウンロードで開発ビルドを利用できます。

于 2010-07-19T15:03:13.243 に答える
2

私がCherryPyを使い始めたときも同様の問題があったと思います...しかし、それが何であったか正確には思い出せません...しかし、修正には、構成を手動で渡す代わりに構成ファイルを使用することが含まれていました。

MyProj.conf:

[グローバル]
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 を使用しており、スクリプトを次のように実行します-W ignore

c:\My_path> python -W MyProj.py を無視

*nix を使用している場合は、ファイルの先頭-W ignore#!コメントに を入力してください。

于 2009-04-29T20:05:54.193 に答える
1
  • 別のポート (たとえば 8000) で使用します。
  • ConfigApiについて読む(もう一度)
  • 3.0 以外の最新バージョンを試す
  • また、一部の Windows ファイアウォール (Eset スマート セキュリティなど) が原因である可能性もあります。したがって、別のポートで使用してください。
于 2009-04-29T16:13:27.497 に答える
1

OS X を使用している場合は、次のように呼び出してみてください。

sudo lsof -i :8080

そのポートを使用しているプロセスがわかります。

于 2016-03-04T13:58:52.977 に答える