Ruby net / ftp代码由于错误而无法PUT文件

我有这个失败的基本代码:

ftpconfighash = open("#{RAILS_ROOT}/config/ftp.yml") {|f| YAML.load(f) } config = ftpconfighash[12345] ftp = Net::FTP::new(config["host"]) ftp.login(config["username"], config["password"]) dir += "/" unless config["dir"].blank? or config["dir"].ends_with?("/") remotename = File.basename(filename) remotename = dir + remotename unless dir.blank? if File.binary?(filename) puts "PUTting binary file #{filename} to #{remotename}" ftp.putbinaryfile(filename, remotename) else puts "PUTting ASCII file #{filename} to #{remotename}" ftp.puttextfile(filename, remotename) end ftp.close 

我已经validation我可以ftp到服务器并手动输入文件。 我还使用irb逐行遍历代码。 我使用XML文件作为测试,因此“ftp.puttextfile”是失败的行。 这是错误:

 Net::FTPPermError: 500 Invalid PORT Command. 

我不明白。 我已经确认我确实可以放这个文件,但我不能用这段代码来做。

我将ftp.debug_mode设置为true,这是ftp.puttextfile命令的输出:

 put: TYPE A get: 200 Type set to A. put: PORT 10,0,1,20,198,170 get: 500 Invalid PORT Command. Net::FTPPermError: 500 Invalid PORT Command. from /Users/me/.rvm/rubies/ruby-1.8.7-p352/lib/ruby/1.8/net/ftp.rb:243:in `getresp' from /Users/me/.rvm/rubies/ruby-1.8.7-p352/lib/ruby/1.8/net/ftp.rb:251:in `voidresp' from /Users/me/.rvm/rubies/ruby-1.8.7-p352/lib/ruby/1.8/net/ftp.rb:274:in `voidcmd' from /Users/me/.rvm/rubies/ruby-1.8.7-p352/lib/ruby/1.8/monitor.rb:242:in `synchronize' from /Users/me/.rvm/rubies/ruby-1.8.7-p352/lib/ruby/1.8/net/ftp.rb:272:in `voidcmd' from /Users/me/.rvm/rubies/ruby-1.8.7-p352/lib/ruby/1.8/net/ftp.rb:287:in `sendport' from /Users/me/.rvm/rubies/ruby-1.8.7-p352/lib/ruby/1.8/net/ftp.rb:295:in `makeport' from /Users/me/.rvm/rubies/ruby-1.8.7-p352/lib/ruby/1.8/net/ftp.rb:328:in `transfercmd' from /Users/me/.rvm/rubies/ruby-1.8.7-p352/lib/ruby/1.8/net/ftp.rb:424:in `retrlines' from /Users/me/.rvm/rubies/ruby-1.8.7-p352/lib/ruby/1.8/monitor.rb:242:in `synchronize' from /Users/me/.rvm/rubies/ruby-1.8.7-p352/lib/ruby/1.8/net/ftp.rb:422:in `retrlines' from /Users/me/.rvm/rubies/ruby-1.8.7-p352/lib/ruby/1.8/net/ftp.rb:631:in `list' from (irb):42 

看起来Ruby正在尝试运行FTP服务器不理解的命令:

 PORT 10,0,1,20,198,170 

有没有办法压制那个命令,还是我错过了其他的东西?

尝试使用被动ftp:

 ftp = Net::FTP::new(config["host"]) ftp.login(config["username"], config["password"]) ftp.passive = true