2009-04-20 16 views
13

जब मैं CherryPy नमस्ते विश्व चला रहा हूँ:CherryPy नमस्ते विश्व त्रुटि

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

आपको शायद उस बंदरगाह पर कुछ और सुना है।

लिनक्स पर कार्य करें:

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

यह निश्चित रूप से यहां काम करता है।
मैं अजगर 2.6.1 और 3.1.1 CherryPy उपयोग कर रहा हूँ और मैं -W ignore साथ स्क्रिप्ट चलाने:

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

आप * nix के तहत कर रहे हैं, तो आप -W ignore#! टिप्पणी में शीर्ष पर रखना चाहिए फाइल का

+0

"-W अनदेखा" है क्योंकि चेरीपी 3.1.1 पूरी तरह से पायथन 2.6 तैयार नहीं है; लेकिन यह अभी भी हमारी आंतरिक जरूरतों के लिए पर्याप्त है। – joce

0

एवीजी एंटी-वायरस मेरे लिए यह समस्या पैदा कर रहा था। अनइंस्टॉलिंग एवीजी (आदर्श से बहुत दूर) चाल है। मुझे लिंक स्कैनर पर संदेह है कि मैं अक्षम नहीं कर सका।

2

मैं कल उबंटू लिनक्स सर्वर पर इस समस्या में भाग गया। इससे पहले कि मुझे एहसास हुआ कि त्रुटि संदेश बहुत सामान्य है, मैंने चेरीपी कोड में बग को ट्रैक करने का प्रयास करने में कुछ घंटे बिताए। यह इस त्रुटि संदेश को तब भी देगा जब होस्ट के पास आईपी पता नहीं है जिस पर सर्वर बाध्य करने का प्रयास कर रहा है। मेरे मामले में, लूपबैक इंटरफ़ेस (लो, 127.0.0.1) अक्षम कर दिया गया था। इस प्रकार, भले ही मैं server.socket_host='0.0.0.0' सेट करता हूं, पोर्ट, wait_for_occupied_port को चेक करने का प्रयास विफल हो जाएगा (जैसा कि यह मानता है कि, लूपबैक इंटरफ़ेस हमेशा उपलब्ध है)। लूपबैक इंटरफ़ेस को पुन: सक्षम करने के बाद, चेरीपी सर्वर सामान्य रूप से शुरू हो जाएगा।

अद्यतन: चेरीपी 3.2.3 इस विशेष मुद्दे के लिए एक फिक्स है। 3.2.3 तक जारी होने तक, विकास निर्माण CherryPy project downloads पर उपलब्ध हैं।

3

Jason R. Coombs लिखा गया है कि अक्षम लूपबैक डिवाइस में कोई समस्या है। heroku.com में लूपबैक अक्षम है इसलिए चेरीपी क्रैश हो जाएगी। इसके लिए मैं filed a bug

अद्यतन: Reported as resolved.

9

आप Heroku, जहां आप यह वास्तव में एक बंदरगाह खोला है, तो आप बस CherryPy के wait_for_occupied_port() समारोह को निष्क्रिय करने की जरूरत है की जाँच करने के लूपबैक उपयोग नहीं कर सकते पर CherryPy तैनात करने के लिए कोशिश कर रहे हैं ताकि CherryPy के आत्म -कॉन्सिस्टेंसी चेक यह तय नहीं करता है कि वास्तव में, यह शुरू करने में विफल रहा है।

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

बेहद उपयोगी यह जवाब वास्तव में यहां से संबंधित नहीं है क्योंकि ओपी के मूल प्रश्न के साथ इसका बहुत कम संबंध है। इस मामले में __ask__ को आपके बहुत ही मूल्यवान उत्तर के लिए एक अधिक विस्तृत और विशिष्ट प्रश्न के लिए अधिक उचित है, __then__ बेशक, इसका उत्तर दें :)। मुझे एहसास है कि दूसरों के पास इस प्रश्न के समान उत्तर हैं ... लेकिन यह किसी भी धागे का अपहरण है तो कुछ भी। –

+3

मेरे उत्तर में उस ** सटीक ** स्क्रिप्ट को चलाने और उस ** सटीक ** त्रुटि को प्राप्त करना शामिल है। मैं यह देखने में असफल रहा कि इस सवाल के साथ "बहुत कम करना" है। आप @ लौरासिया के उत्तर से देख सकते हैं कि अन्य लोग मेरे प्रश्न को इस प्रश्न से भी प्रासंगिक मानते हैं। –

+1

हाँ, बस पुष्टि की गई है कि IOError और ChannelFailures प्राप्त करें IOError: IOError, कभी-कभी, और कभी-कभी मुझे सिगरेट मिलता है। तो, आप सही हैं, मैं "बहुत कम करने के लिए" टिप्पणी के बारे में गलत था। कभी-कभी त्रुटि की कमी मेरे भ्रम का कारण था। मैं अभी भी एक नए धागे की ओर थोड़ा दुबला होगा;) –

0

मैं अजगर 3.3 सर्वर सामान्य रूप से शुरू होगा और साथ मेरे Win7 पीसी पर एक ही समस्या CherryPy 3.2.2 चल रहा है जब था: यहाँ तीन लाइनों है कि मैं CherryPy ठीक करने के लिए का उपयोग इतना है कि यह Heroku पर चलता कर रहे हैं तो लगभग कुछ मिनट में दुर्घटनाग्रस्त हो जाएगा।

मैंने चेरीपी 3.2.3 लॉरासिया से 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

मुझे एक ही समस्या थी, उसी सेटअप के साथ, केवल ओएस एक्स पर। मैंने बस उसी फ़ाइल में आखिरी पंक्ति पर टिप्पणी की। 'IOError बढ़ाएं ("पोर्ट% आर% आर"% (पोर्ट, होस्ट) पर बाध्य नहीं है) ' –

1

आप ओएस एक्स पर हैं, तो कॉल करने का प्रयास:

sudo lsof -i :8080 

जो आपको उस पोर्ट का उपयोग कर प्रक्रिया बताएगा।

संबंधित मुद्दे