2013-02-27 156 views
10

मैं रूबी के साथ एक FTP सर्वर से डेटा सूचीबद्ध और डाउनलोड करने के लिए एक स्क्रिप्ट बनाने की कोशिश कर रहा हूं। मैं रूबी के लिए नया हूं इसलिए मैंने नेट :: एफ़टीपी का उपयोग करने के लिए प्रलेखन की तलाश की। ,नेट :: एफ़टीपी सर्वर से कनेक्ट क्यों नहीं हो सकता है?

require 'net/ftp' 

server = "ftp.server.com" 
user = "myuser" 
password = "mypassword" 


Net::FTP.open(server, user, password) do |ftp| 
     files = ftp.chdir('mydirectory/') 
     files = ftp.list 
     puts "list out of directory:" 
     puts files 
end 

काम नहीं करता है यही कारण है कि इस त्रुटि लौटने:

 
/home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/ftp.rb:298:in `getresp': 425 >Failed to establish connection. (Net::FTPTempError) 
    from /home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/ftp.rb:325:in `block in sendcmd' 
    from /home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize' 
    from /home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/ftp.rb:323:in `sendcmd' 
    from /home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/ftp.rb:402:in `transfercmd' 
    from /home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/ftp.rb:478:in `block (2 levels) in retrlines' 
    from /home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/ftp.rb:178:in `with_binary' 
    from /home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/ftp.rb:477:in `block in retrlines' 
    from /home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize' 
    from /home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/ftp.rb:476:in `retrlines' 
    from /home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/ftp.rb:722:in `list' 
    from test_ftp.rb:10:in `block in ' 
    from /home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/ftp.rb:116:in `open' 
    from test_ftp.rb:8:in `' 

किसी को क्या मेरी स्क्रिप्ट के साथ गलत क्या है व्याख्या कर सकते हैं मैं मुसीबत समझ क्यों यह काम नहीं करता है?

उत्तर

37

आपका कोड मेरे लिए ठीक काम करता है। मुझे संदेह है कि समस्या Net::FTP कनेक्शन मोड के कारण हो सकती है, जो डिफ़ॉल्ट रूप से सक्रिय है। निष्क्रिय मोड का उपयोग कर कनेक्ट करने का प्रयास, कोड नमूने निम्न -

ftp = Net::FTP.new(server) 
ftp.passive = true 
ftp.login user, password 
files = ftp.chdir('mydirectory/') 
files = ftp.list 
puts "list out of directory:" 
puts files 
ftp.close 

और अगर आप उत्सुक हैं, तो निम्न difference (विकिपीडिया से) सक्रिय और निष्क्रिय मोड के बीच है।

  1. सक्रिय मोड में, क्लाइंट सर्वर को एक टीसीपी नियंत्रण कनेक्शन बनाता है और सर्वर क्लाइंट के IP पते और एक मनमाना ग्राहक पोर्ट संख्या भेजता है और फिर जब तक सर्वर से टीसीपी से अधिक डेटा कनेक्शन शुरू की इंतजार कर रहा है वह ग्राहक आईपी पता और क्लाइंट पोर्ट नंबर। ऐसी परिस्थितियों में जहां ग्राहक फ़ायरवॉल के पीछे है और आने वाले टीसीपी कनेक्शन स्वीकार करने में असमर्थ है, निष्क्रिय मोड का उपयोग किया जा सकता है।
  2. निष्क्रिय मोड में, क्लाइंट सर्वर पर एक पीएएसवी कमांड भेजने के लिए नियंत्रण कनेक्शन का उपयोग करता है और उसके बाद सर्वर से एक सर्वर आईपी पता और सर्वर पोर्ट नंबर प्राप्त करता है जिसे क्लाइंट एक मनमाना से डेटा कनेक्शन खोलने के लिए उपयोग करता है सर्वर आईपी पते और सर्वर पोर्ट नंबर प्राप्त करने के लिए क्लाइंट पोर्ट।
+0

धन्यवाद आशीष, मैं नेट बदलता हूं: एफ़टीपी मोड निष्क्रिय करने के लिए, और यह काम करता है बिना मैं ftp सर्वर कॉन्फ़िगरेशन बदलता हूं .. :) – adhown

+0

@ अगर इसे मदद मिली तो आपको जवाब स्वीकार करना चाहिए। ऐसा करने से न केवल आपकी प्रतिष्ठा में थोड़ा जोड़ता है बल्कि यह सुनिश्चित करने में एक लंबा रास्ता तय करता है कि लोग आपके प्रश्नों का उत्तर देते रहें। – saihgala

+0

@ आशीष .. क्षमा करें आशीष मैं स्टैक ओवरफ्लो के लिए नया हूं, मुझे समझ में नहीं आता कि आपका क्या मतलब है .. मुझे क्या करना चाहिए? – adhown

2

निम्न स्क्रिप्ट मेरी मशीन से काम करता है, और तुम्हारा पर आधारित है, एक छोटी सी सफाई के साथ:

list out of directory: 
lrwxrwxrwx 1 root  ftp   32 Jul 12 2010 00-README-TO-UPLOAD-FILES.txt -> ../00-README-TO-UPLOAD-FILES.txt 
drwxr-sr-x 3 root  ftp   21 Mar 7 2001 elj 
drwxr-sr-x 3 root  ftp   4096 Jan 6 2004 lg 
drwxr-sr-x 8 root  ftp   113 Jun 21 2010 lj 
drwxr-sr-x 5 root  users   112 Oct 2 2007 ssc 
drwxr-sr-x 2 root  ftp   4096 Jan 3 17:21 tux 

मैं कोड कहेंगे:

require 'net/ftp' 

Net::FTP.open('ftp.linuxjournal.com', 'anonymous', '[email protected]') do |ftp| 
    ftp.chdir('pub/') 
    files = ftp.list 
    puts "list out of directory:" 
    puts files 
end 

यह आउटपुट मैं मिलता है काम करता है, और समस्या कहीं और है।

425 >Failed to establish connection के कारण मुझे लगता है कि आपको अपने DNS और/या फ़ायरवॉल की जांच करनी चाहिए।

+0

या, मैं पहले से ही आईआरबी के माध्यम से अपना कोड जांचता हूं, यह कोड लॉगिन कर सकता है लेकिन जब मैं सूची करने की कोशिश करता हूं, त्रुटि appera। मुझे लगता है कि समस्या मेरे FTP सर्वर विन्यास से संबंधित है .. सलाह के लिए धन्यवाद। :) – adhown

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

  • कोई संबंधित समस्या नहीं^_^