2012-04-20 18 views
1

のファイルを置くことができない私は失敗している。この基本的なコードを持っている:ルビーネット/ ftpのコードエラーが原因

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 

を私は、サーバーへのFTP、手でファイルを置くことができることを確認しました。私もirbを使ってコードを一行ずつ歩きました。私はテストとしてXMLファイルを使用しているので、 "ftp.puttextfile"は失敗している行です。ここにエラーがあります:

Net::FTPPermError: 500 Invalid PORT Command. 

わかりません。私は確かにこのファイルを置くことができることを確認しましたが、私はこのコードではできません。

私がtrueにftp.debug_modeを設定し、これは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 

このコマンドを抑制する方法はありますか、それとも他に何か不足していますか?

答えて

5

はパッシブFTPを使用してみてください:

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

ftp.passive = true 
+0

私はこの宝石「ペーパークリップ・ストレージ-FTP」を使用していると私はネットのようなエラーを取得しています:: FTPPermError 500の写真をアップロード中。私はこの行をどこに置くべきか教えてください。ftp.passive = true in model ??あなたもこれを見ることができますhttp://stackoverflow.com/questions/33540851/getting-random-error-while-upload-photo-with-paperclip-on-my-ftp-server –

関連する問題