2009-04-20 13 views
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' の上で結合されていません。どうなり得るか?

+0

私は以前この問題に直面しました。この質問が誰かを助けることを願っています。 –

答えて

7

おそらく、そのポートでリッスンしていることがあります。 Linuxの

は行います

netstat -pnl | grep 8080 

およびWindows 8080

をリッスンしているどのようなプロセス参照は、同じことを行うためにTCPViewようなものを使用します。

1
  • (例えば8000)別のポート上でそれを使用し
  • 読む約ConfigApi(再び)
  • また、これは一部のWindowsファイアウォール(ESETスマートセキュリティが原因で発生することができ、最新バージョンではありません3.0
  • をお試しくださいまたは他のもの)。だから、それを別のポートで使用してください。
1

私はCherryPyを使い始めたときに同様の問題があったと思っています...しかし、私はそれが何であるかを覚えていません...しかし、手作業でconfigsを渡すのではなく、

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を使用していると私は-W ignoreでスクリプトを実行します。

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

あなたは* nixの下であれば、あなたが一番上に#!コメントに-W ignoreを置く必要がありますファイルの

+0

CherryPy 3.1.1が完全にPython 2.6に対応していないため、「-W ignore」があります。ここでも私たちの内部的なニーズにはまだ十分です。 – joce

0

AVG Anti-Virusがこの問題を引き起こしていました。 AVGをアンインストールすると(理想から遠い)、そのトリックは成し遂げられました。私は無効にできなかったリンクスキャナを疑う。

2

昨日Ubuntu Linuxサーバーでこの問題に遭遇しました。私はエラーメッセージが非常に一般的であることに気付く前に、CherryPyコードのバグを追跡するのに2時間を費やしました。ホストがバインドしようとしている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 project downloadsで利用可能です。

3

Jason R. Coombsと書かれているように、無効化されたループバックデバイスに問題があります。 heroku.comがループバックを無効にしているため、CherryPyがクラッシュします。これのために私はfiled a bugです。

更新:Reported as resolved.

9

あなたは、あなたが本当にポートが開いているかどうかを確認するためにループバックを使用することはできませんHerokuの上CherryPyには、展開しようとしている場合、あなたは、単にCherryPyにの自己ようにCherryPyにのwait_for_occupied_port()機能を無効にする必要があります - 一貫性チェックでは、実際に開始に失敗したと判断されません。ここで私はそれがHerokuの上で実行されるようにCherryPyに問題を解決するために使用する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 
+1

非常に便利ですが、OPの元の質問とはほとんど関係がないため、この回答は実際にはここに属しません。この場合、あなたの非常に貴重な答えに、より詳細で具体的な質問を__ask__するのが適切です。__then__もちろん、答えてください:)。私は他の人がここでこの質問に似たような答えを持っていることを理解しています...しかし、それは何よりもスレッドハイジャックのものです。 –

+3

私の答えは**正確な**スクリプトを実行して**正確な**エラーを得ることです。私はそれがどのようにして質問に「やるべきことはほとんど」ないかを見落とす。あなたは@ laurasiaの答えから、他の人がこの質問に関連する私の答えを考えているのを見ることができます。 –

+1

うん、ちょうど私が__do__ IOErrorとChannelFailures:IOError、時々、そして時々私はSIGTERMを取得することを確認しました。だから、あなたは正しい、私は間違っていた "非常に少ない"のコメントです。エラーの欠如が時折私の混乱の原因でした。私はまだ少しでも新しいスレッドに向かって傾けるだろう;) –

0

私は、Python 3.3 と私のWin7のPC上でCherryPyは3.2.2を実行しているときに、サーバーが正常に起動するのと同じ問題を抱えていたがや約2分でクラッシュするだろう。

私は前述のCherryPy 3.2.3 Laurasiaからpatchを適用しました。しかし、それは役に立たなかった。

だから私は死んでからサーバーを防ぐために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上でのみ、同じ設定で同じ問題を抱えていました。私はちょうど同じファイルの最後の行をコメントアウトしました。 'IOErrorを引き上げる(ポート%rは%rにバインドされていません"%(port、host)) ' –

1

あなたはOS Xにしている場合は、呼び出してみてください:

sudo lsof -i :8080 

これは、そのポートを使用しているプロセスを通知します。