2013-02-27 32 views
10

Tôi đang cố gắng tạo tập lệnh để liệt kê và tải xuống dữ liệu từ máy chủ FTP bằng Ruby. Tôi mới sử dụng Ruby nên tôi đã tìm tài liệu hướng dẫn cách sử dụng Net :: FTP. Tôi gặp khó khăn khi tìm hiểu tại sao điều này không làm việc:Tại sao không thể Net :: FTP kết nối với máy chủ?

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 

Điều đó không làm việc, trở về lỗi này:

 
/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 `' 

thể bất cứ ai giải thích những gì xảy ra với kịch bản của tôi không?

Trả lời

37

Mã của bạn hoạt động tốt cho tôi. Tôi nghi ngờ vấn đề có thể là do chế độ kết nối Net::FTP, được kích hoạt theo mặc định. Thử kết nối sử dụng chế độ thụ động, sau mẫu mã -

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 

Và nếu bạn tò mò, sau đây là difference (từ wikipedia) giữa các chế độ hoạt động và thụ động.

  1. Trong tích cực chế độ, khách hàng sẽ tạo ra một kết nối điều khiển TCP đến máy chủ và gửi các máy chủ địa chỉ IP của khách hàng và một số cổng khách hàng tùy ý, và sau đó chờ đợi cho đến khi máy chủ khởi tạo kết nối dữ liệu qua giao thức TCP để địa chỉ IP của khách hàng đó và số cổng của ứng dụng khách. Trong trường hợp máy khách ở phía sau tường lửa và không thể chấp nhận các kết nối TCP đến, chế độ thụ động có thể được sử dụng.
  2. Ở chế độ Bị động, khách hàng sử dụng kết nối điều khiển để gửi lệnh PASV đến máy chủ và sau đó nhận địa chỉ IP máy chủ và số cổng máy chủ từ máy chủ mà khách hàng sử dụng để mở kết nối dữ liệu từ một tùy ý cổng khách hàng đến địa chỉ IP của máy chủ và số cổng máy chủ đã nhận.
+0

Cảm ơn Ashish, tôi thay đổi Net: chế độ FTP thành thụ động, và nó hoạt động mà không cần thay đổi cấu hình máy chủ ftp .. :) – adhown

+0

@adhown nếu nó giúp bạn nên chấp nhận câu trả lời. Làm như vậy không chỉ làm tăng thêm chút ít danh tiếng của bạn mà còn đi một chặng đường dài trong việc đảm bảo rằng mọi người tiếp tục trả lời các truy vấn của bạn. – saihgala

+0

@Ashish .. xin lỗi Ashish Tôi mới vào stackoverflow, tôi không hiểu ý bạn là gì .. tôi nên làm gì? – adhown

2

Các kịch bản sau đây làm việc từ máy tính của tôi, và được dựa trên của bạn, với một dọn dẹp nhỏ:

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 

Đây là sản phẩm tôi nhận được:

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 

Tôi muốn nói mã công trình và vấn đề là ở nơi khác.

425 >Failed to establish connection Tôi nghĩ bạn nên kiểm tra DNS và/hoặc tường lửa của mình.

+0

yaaa, tôi đã kiểm tra mã của mình qua irb, đó là mã có thể đăng nhập nhưng khi tôi cố gắng liệt kê, lỗi appera. Tôi nghĩ rằng vấn đề liên quan đến cấu hình máy chủ FTP của tôi .. cảm ơn lời khuyên. :) – adhown

Các vấn đề liên quan